(let ((print-circle t)
(lst '(7 8 3 9 4 0 1 6 5 2)))
(princ (list (sort lst #'<) lst))
(terpri))
;-> ((0 1 2 3 4 5 6 . #1=(7 8 9)) #1#)
;=> t
((lambda (x)
((lambda (y1)
((lambda (&optional y2)
((lambda (z)
(list x y1 y2 z))
(car (cdr #1=(cdr #2='(1 (2) 3))))))
(car (cdr #3=(car #1#)))))
(car #3#)))
(car #2#))
;=> (1 2 nil 3)
;; 上のコードは少し古い destructuring-bind のマクロ展開 (CL)
(macroexpand '(destructuring-bind (x (y1 &optional y2) z) '(1 (2) 3)
(list x y1 y2 z)))
Emacs Lisp はかなり Common Lisp に近い仕様なんだなと改めて思った。
# もちろん動的スコープだとかクロージャが無いとかツッコミはあるけど :-)
しかしこの書き方 (#n#) の名称なんだっけ...
CLtL2, CLHS をパッと見たけど 「#n# 構文 (#n# syntax)」としか書いてなかった。
あと、影響を受けたのは CL より Maclisp 方言か。歴史知らなさ過ぎかもしれない。
0 件のコメント:
コメントを投稿