予測できる使い方の範囲では、これが最も直感的で贅肉のない方法だと思う。らしい。個人的には、むしろ直感的でなくなっているように思いますが・・・。
ところで、Gaucheで書くにあたり、何の気なしにfold-rightで書きましたが、これだとLOLに書かれているようなドットリストではうまくいきませんね。
このtree-leavesのところで「アナフォラ」という単語が出てきました。アナフォリックマクロ楽しみです。
(cut cons (+ a 1) <>) ≡ (lambda (x2) (cons (+ a 1) x2))
(cut list 1 <> 3 <> 5) ≡ (lambda (x2 x4) (list 1 x2 3 x4 5))
(cut list) ≡ (lambda () (list))
(cut list 1 <> 3 <...>)
≡ (lambda (x2 . xs) (apply list 1 x2 3 xs))
(cut <> a b) ≡ (lambda (f) (f a b))部分適用便利だなー!
CL-USER> (let ((v "hoge"))
(list (print v)
(prin1 v)
(princ v)
(pprint v)))
"hoge" "hoge"hoge
"hoge"("hoge" "hoge" "hoge" NIL)
|
prin1
関数readに適した出力,すなわちLispプログラムに適した出力を生成する.
princ
prin1がLispプログラムに適した出力を生成するのに対し,princはユーザの見やすい出力を生成する.エスケープ文字も出力されない.
先頭に改行が付加される点を除いてprin1と同じである.
pprint
続くスペースを空行にすることを除いてprintと同じである.
| (princ "\n\nこんにちわ!") |
↓
↓ こんにちわ! |
| (prin1 "\n\nこんにちわ!") | \n\nこんにちわ! |
CL-USER> (mapcar (lambda (e)
(funcall e "hoge"))
`(print princ prin1 pprint))
"hoge" hoge"hoge"
"hoge"("hoge" "hoge" "hoge" NIL)
|