本当にlistだった。

 最近気づいたことにWhileとかdotimesってマクロだったのかと。中身を見たら驚いた。list processorってのは嘘じゃなかった。読めないので何をしているのかよく分からないが、リストを駆使して動作を実現している様子。lispが他の言語と違うという理由が少し分かった気がする。なんとdefunまでマクロだったらしい。

(defmacro defun (name (&rest lambda-list) &body body)
  (multiple-value-bind (decl body)
      (find-declaration body)
    (multiple-value-bind (intr body)
	(find-interactive body)
      (let ((doc (find-documentation body)))
	`(let ()
	   ,(if doc
		`(si:*putprop ',name ,doc 'function-documentation))
	   (si:*fset ',name
		     (si:*set-function-name
		      #'(lambda ,lambda-list ,@decl ,@intr
			  (block ,name ,@body))
		      ',name)))))))

関係ないが、良く出てくる@bodyとかいうのの@ってのは何だろう。