0
0

More than 3 years have passed since last update.

Lisp に無理を言う

Last updated at Posted at 2021-06-07

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#)」と表示され、循環リストであると認識されている。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0