Lisp にいたずらしたいと思ったら評価しようにもしきれない循環リストを作ればよい。
循環リストは次のようにして簡単に作れる.
(setf test '(1 2))
(rplacd (cdr test) test)
SBCL の場合
この2行をsbcl 上で評価すると (その様子をhtop等で眺めると) CPU の負荷を100%に張り付かせ、メモリーを喰いつくした挙げ句「sbcl terminated by signal SIGKILL (Forced quit)」と言って絶命する。
LispWorks の場合
LispWorks 7.1 Personal (64-bit) で同じことをやると
"You are approaching the heap size limit for the Personal Edition of LispWorks.
If you choose to continue now you are advised to save your work at regular intervals."
「LispWorks Personal Edition のヒープサイズの限界に近づいています。
このまま続行する場合は、定期的に作業内容を保存することをお勧めします。」
と言って終了してしまう。
"LispWorks Personal Edition の" という言葉がさらりと入っているあたり、「もしかしたら有料版だったら…??」という淡い期待を抱かせてくれる。
Allegro の場合
Allegro CL 10.1 Express では、
CG-USER(1): (setf test '(1 2))
(1 2)
CG-USER(2): (rplacd (cdr test) test)
(2 1 2 1 2 1 2 1 2 1 ...)
CG-USER(3):
とケロリ🐸としている。
(inspect 'test)
で内容を観察するとsymbol-valueは「#1=(1 2 . #1#)」と表示され、循環リストであると認識されている。