Is this expected? CL-USER> (ql:quickload "parenscript") ... CL-USER> (defpackage :ps-user (:use :cl :ps)) #<The PS-USER package, 0/16 internal, 0/16 external> CL-USER> (in-package "PS-USER") #<The PS-USER package, 0/16 internal, 0/16 external> PS-USER> (ps (let ((s-a)))) "(function () { var sA = null; return null; })();" Also, $ cat foo.lisp (let ((s-a)) (+ s-a 42) (chain s-a (append-child foo))) PS-USER> (ps-compile-file "foo.lisp") "(function () { var sA = null; sA + 42; return sA.appendChild(foo); })(); " PS-USER> Which is against documentation "Top-level LET and LET* forms will create new global variables, or overwrite the values of already existing global variables with the same name." Please comment