λ…
バッククォート怖い…
Let Over Lambdaで紹介されてる例が怖い…
CL-USER> (let ((let '`(let ((let ',let)) ,let))) `(let ((let ',let)) ,let)) (LET ((LET '`(LET ((LET ',LET)) ,LET))) `(LET ((LET ',LET)) ,LET)) CL-USER> (equal + *) T
確かに処理を追っていけば式とその値が等しいことが分かるけど、
どうやってこんなものを思いついたんだろう…
とりあえずインスパイヤしてみた。
((lambda (lambda) `((lambda (lambda) ,lambda) ',lambda)) '`((lambda (lambda) ,lambda) ',lambda))
さらに、次の式を評価し、
『(set-macro-character #\λ #'(lambda (stream c) ‘lambda))』
lambdaの代わりにλを使えるようにするとますます気持ち悪い書き方ができる。
((λ (λ) `((λ (λ) ,λ) ',λ)) '`((λ (λ) ,λ) ',λ))
意味不明すぎてかっこよく見えてきた。