Programming languages were at one point a flourishing research area. In some areanas, they still are. It is difficult to get a programming language "right." Parenscript is fortunate in that it is modelled after a language to which many people have contributed a great deal over many decades. Most of the links and notes below refer to ideas about Common Lisp. Some are about Javascript, the target programming language and environment for Parenscript. Strange Javascript Semantics =========================================================================== var x = 1; function foo() { if (x == ONE_OR_NOT_ONE) { var x = 3; } return "bleck: " + x; }; foo(); This code returns "bleck: undefined" when ONE_OR_NOT_ONE is 1 or 2. See http://www.ecma-international.org/publications/files/ecma-st/ECMA-262.pdf page 37 for an explanation of the semantics of variable scope. var x = 1; function foo(a) { return foo; var foo=5; } foo(3); => 'undefined' var x = 1; function foo(a) { return foo; } foo(3); => thee function foo Reference material =========================================================================== Macro Expansion in Lisp: Common Lisp the Language, 2nd Edition. http://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node99.html File Compilation: http://www.lispworks.com/documentation/HyperSpec/Body/03_bca.htm Special forms in Lisp: CLHS http://www.lisp.org/HyperSpec/Body/sec_3-1-2-1-2-1.html block let* return-from catch load-time-value setq eval-when locally symbol-macrolet flet macrolet tagbody function multiple-value-call the go multiple-value-prog1 throw if progn unwind-protect labels progv let quote