Shammer's Philosophy

My private adversaria

Lisp の dolist(反復)

loop と do に続いて、dolist を使ってみる。Lisp $B%W%m%0%i%_%s%0#1(Bによれば、dolist は foreach 文に相当するようだ。
サンプルを書いてみる。

>(setq lst '(1 2 3 4 5 6 7 8 9))
(1 2 3 4 5 6 7 8 9)
>(setq result 1)
1
>(dolist (i lst result) (setq result (* result i)))
;Compiler warnings :
;   In an anonymous lambda form at position 11: Undeclared free variable LST
;   In an anonymous lambda form at position 0: Undeclared free variable RESULT (3 references)
362880

またよくわからないエラーが出た・・・LST は宣言されていない変数です、みたいに見えるが・・・
この前に(setq lst '(1 2 3 4...) とやっているのになぜこれが出るんだ?実行はできているみたいだが。