クワイン
生きてるよ!
Ruby でクワイン(自分自身を出力するコード)作ってた人に触発されて、自分も Lisp と JavaScript で書いてみました。
まず Lisp バージョン。関数 write は、今回使った Racket という処理系のプリント関数。
((lambda (x) (write `(,x ',x))) '(lambda (x) (write `(,x ',x))))
続いて JavaScript バージョン。こちらは console.log で出力。
q1="'",q2='"',eval(s="console.log('q1='+q2+q1+q2+',q2='+q1+q2+q1+',eval(s='+q2+s+q2+')')")
【追記】
JavaScript では関数の toString メソッドを呼ぶと関数定義を文字列にしたものが返ってくるらしい(Google Chrome でしか試してないけど)。それならこれで良かったわけだ。
(function f(){console.log('('+f+')()')})()