2010/11/08

quine : 自分自身を出力するプログラム

クワイン(英: Quine)は、コンピュータプログラムにおけるメタプログラミングの一形態であり、自身の完全なソースコードだけを出力するプログラムである。
だそうです。

quine というものを初めて目にしたのはこれでした。
((lambda (x)
   `(,x ',x))
 `(lambda (x)
    `(,x ',x)))
でもこれ↑実行すると評価されちゃってて自身のソースコードを出力してないんじゃぁ・・・。(ソースの転載ミスでした)

そういえば、LOL(LET OVER LAMBDA Edition 1.0) にもありました。
* (let ((let '`(let ((let ',let))
                 ,let)))
    `(let ((let ',let)) ,let))

(LET ((LET '`(LET ((LET ',LET))
               ,LET)))
  `(LET ((LET ',LET)) ,LET))

この方のプロフィール欄とか。
((lambda (lambda) `((lambda (lambda) ,lambda) ',lambda)) '`((lambda (lambda) ,lambda) ',lambda))

検索してみたらこんなページがありました。
(call/cc
 (lambda (c)
   (call/cc
    (lambda (cc)
      (c ((lambda (c)
            `(call/cc
              (lambda (c) (call/cc (lambda (cc) (c (,c ',c)))))))
          '(lambda (c)
             `(call/cc
               (lambda (c) (call/cc (lambda (cc) (c (,c ',c)))))))))))))
((lambda (x) `(,(reverse x) ',x)) '(`(,(reverse x) ',x) (x) lambda))

ハンパねぇ!


まぁ、だからどうということではないのですが。。

LET OVER LAMBDA Edition 1.0

0 件のコメント:

コメントを投稿