Shammer's Philosophy

My private adversaria

Lisp の 繰り返し処理

Lisp にも繰り返し処理があるようだ。
再帰処理が中心だから、繰り返しも再帰で表現するものと思っていたが。
以下のように書く。

  (while (< x 100)
    (setq sum (+ sum x))
    (setq x (+ x 1)))

loop というのもある。

  (loop 
    (setq sum (+ sum x))
    (setq x (+ x 1))
    (if (> x 100)
      (return sum)))

loop を実行すると、応答は返ってくるものの、以下のようなエラーも確認できた。

;Compiler warnings :
;   In an anonymous lambda form at position 66: Undeclared free variable X (4 references)
;   In an anonymous lambda form at position 76: Undeclared free variable SUM (3 references)

エラーの意味はよくわからないが・・・慣れていけばわかってくるだろう。