(shadow 'defun)
(shadow 'let)
(shadow 'flet)
(shadow 'labels)
(cl:defun make-funcall-macros (bindings)
(mapcar
#'(lambda (x)
(cl:let
((name (if (listp x)
(car x)
x)))
`(,name (&rest args)
`(funcall ,',name ,@args))))
bindings))
(defmacro defun (name args &body body)
`(progn
(cl:defun
,name ,args
(macrolet
,(make-funcall-macros args)
,@body))
(defparameter ,name #',name)))
(defmacro let (bindings &body body)
`(cl:let ,bindings
(macrolet
,(make-funcall-macros bindings)
,@body)))
(defmacro flet (bindings &body body)
`(let ,bindings ,@body))
(defmacro labels (bindings &body body)
`(let ,(mapcar #'car bindings)
(macrolet
,(make-funcall-macros bindings)
,@(mapcar
#'(lambda (x)
`(setq ,(car x)
#'(lambda ,@(cdr x))))
bindings)
,@body)))
(defun add (a b)
(+ a b))
(print (mapcar add '(1 2 3) '(4 5 6)))
(let ((test #'(lambda (x) (print x))))
(test 1))
KHNoYWRvdyAnZGVmdW4pCihzaGFkb3cgJ2xldCkKKHNoYWRvdyAnZmxldCkKKHNoYWRvdyAnbGFiZWxzKQoKKGNsOmRlZnVuIG1ha2UtZnVuY2FsbC1tYWNyb3MgKGJpbmRpbmdzKQogIChtYXBjYXIKICAgICMnKGxhbWJkYSAoeCkKICAgICAgICAoY2w6bGV0CiAgICAgICAgICAoKG5hbWUgKGlmIChsaXN0cCB4KQogICAgICAgICAgICAgICAgICAgKGNhciB4KQogICAgICAgICAgICAgICAgICAgeCkpKQogICAgICAgICAgYCgsbmFtZSAoJnJlc3QgYXJncykKICAgICAgICAgICAgICAgICAgYChmdW5jYWxsICwnLG5hbWUgLEBhcmdzKSkpKQogICAgYmluZGluZ3MpKQoKKGRlZm1hY3JvIGRlZnVuIChuYW1lIGFyZ3MgJmJvZHkgYm9keSkKICBgKHByb2duCiAgICAgKGNsOmRlZnVuCiAgICAgICAsbmFtZSAsYXJncwogICAgICAgKG1hY3JvbGV0CiAgICAgICAgICwobWFrZS1mdW5jYWxsLW1hY3JvcyBhcmdzKQogICAgICAgICAsQGJvZHkpKQogICAgIChkZWZwYXJhbWV0ZXIgLG5hbWUgIycsbmFtZSkpKQoKKGRlZm1hY3JvIGxldCAoYmluZGluZ3MgJmJvZHkgYm9keSkKICBgKGNsOmxldCAsYmluZGluZ3MKICAgICAobWFjcm9sZXQKICAgICAgICwobWFrZS1mdW5jYWxsLW1hY3JvcyBiaW5kaW5ncykKICAgICAgICxAYm9keSkpKQoKKGRlZm1hY3JvIGZsZXQgKGJpbmRpbmdzICZib2R5IGJvZHkpCiAgYChsZXQgLGJpbmRpbmdzICxAYm9keSkpCgooZGVmbWFjcm8gbGFiZWxzIChiaW5kaW5ncyAmYm9keSBib2R5KQogIGAobGV0ICwobWFwY2FyICMnY2FyIGJpbmRpbmdzKQogICAgIChtYWNyb2xldAogICAgICAgLChtYWtlLWZ1bmNhbGwtbWFjcm9zIGJpbmRpbmdzKQogICAgICAgLEAobWFwY2FyCiAgICAgICAgICAgIycobGFtYmRhICh4KQogICAgICAgICAgICAgICBgKHNldHEgLChjYXIgeCkKICAgICAgICAgICAgICAgICAgICAgICMnKGxhbWJkYSAsQChjZHIgeCkpKSkKICAgICAgICAgICBiaW5kaW5ncykKICAgICAgICxAYm9keSkpKQoKKGRlZnVuIGFkZCAoYSBiKQogICgrIGEgYikpCgoocHJpbnQgKG1hcGNhciBhZGQgJygxIDIgMykgJyg0IDUgNikpKQoKKGxldCAoKHRlc3QgIycobGFtYmRhICh4KSAocHJpbnQgeCkpKSkKICAodGVzdCAxKSk=