Argh! The parenthesis! They burn my eyes! ----------------------------------------- Overview ======== One of the more common complaints people have against the lisp language family is the abbundance of parenthesis is source code. "To hell with 'em!" I hear you say, and you're right, but it still makes for an interesting quiz. Goal ==== You're going to prove that common lisp really is the "Programmable Programming Language"[1] by changing the syntax to use less parenthesis. Write a function quiz2::read-off-side which allows python-style whitspace-sensitive source code (this is sometimes called the "off side" rule[2]). This function will be bound to the #! dispatching macro character and so must have this api (the test suite assumes this): (quiz2::read-off-side stream subchar parameter) => form The easiest way to explain how the syntax works is to show it. Example 1: #! when t (do-stuff) !# => (progn (when t (do-stuff))) Example 2: 1:#! 2:cond 3: (zerop a) 4: (write-line "A is zero.") 5: (plusp a) 6: (write-line "A is positive.") 7: t 8: (write-line "A is negative.") 9:(write-line "Done.") b:!# => (progn (cond ((zerop a) (write-line "A is zero.")) ((plusp a) (write-line "A is positive.")) (t (write-line "A is negative."))) (write-line "Done.")) If you have any doubts on how a form should be parsed see the print-off-sides function in the test suite. Test Suite ========== A test suite is available at: http://common-lisp.net/project/quiz/quizzes/quiz2/quiz2-test.lisp You'll need to load your code before that file, it assumes the quiz2 package, and read-off-side function, already exist. After you've loaded the file execute (5am:run! :quiz2) to run the test suite, it uses my FiveAM[3] test suite. If you want to rewrite the test suite using another framework go ahead, I'll add a link to your rewrite here. [1] - John Foderaro, CACM, September 1991 [2] - http://en.wikipedia.org/wiki/Off-side_rule [3] - http://common-lisp.net/project/bese/FiveAM.html