+(defvar *compilations* nil)
+
+(defmacro define-compilation (name args &body body)
+ "creates a new primitive `name' with parameters args and @body. The
+body can access to the local environment through the variable env"
+ `(push (list ',name (lambda (env ,@args) ,@body))
+ *compilations*))
+
+(define-compilation if (condition true false)
+ (format nil "((~a)? (~a) : (~a))"
+ (ls-compile condition env)
+ (ls-compile true env)
+ (ls-compile false env)))
+
+(define-compilation lambda (args &rest body)
+ (concat "(function ("
+ (format nil "~{V_~a~^, ~}" args)
+ "){ "
+ (ls-compile-block body (extend-env args env))
+ "})
+"))