2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

【入門】Common Lisp その10【質問よろず】

500 :デフォルトの名無しさん:2013/12/06(金) 00:34:27.29
仕様はコレ。
http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm

仕様どおりにリーダマクロを展開すると
``(,`(,x ,x) ,`(,x ,x))
=> ``(,(APPEND X X NIL) ,(APPEND X X NIL))
=> `(APPEND (APPEND X X NIL) (APPEND X X NIL))
となる(仕様上もうちょっと展開は続く)。

が、それぞれの時点で equal の意味で等しい範囲内での最適化が許されている。
この式を最適化すれば
`(APPEND (APPEND X X NIL) (APPEND X X NIL))
=> `(LIST (LIST X X) (LIST X X)) ;; *1
となり、 clisp 2.48 の例と一致する。

backquote が専用のマクロに展開されるような処理系だと、
`や,の情報を展開後も保持できる。
ここで
(LIST X X) == `(,X ,X)
(LIST `(,X ,X) `(,X ,X)) == `((,X ,X) (,X ,X))
であるから、 sbcl 1.0.48 の例も正しい。

199 KB
新着レスの表示

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)