loop で フィボナッチ数。あるいは and
次のようにしてうまくいかなかった。
(defun fib (n) (loop for a = 0 then b for b = 1 then (+ a b) repeat n finally (return a)))
b に (+ a b) をいれる時点で a は b になっていたから。
CLiki: Fibonacci を見ると、同じようなコードが載っていて、どうしてちゃんと動くんだ、とよく見てみたら、b の前の for が and になっていた。
(defun fib (n) (loop for a = 0 then b and b = 1 then (+ a b) repeat n finally (return a)))
これで a と b の更新が パラレル に行われる。
ちゃんと http://www.lisp.org/HyperSpec/Body/sec_6-1-2-2.html に書いてあった。
パラレルといえば、psetq, let, do なんかも同様。逆にシーケンシャルなのは setq, let*, do*.
Common Lisp は本当細かいところまでよく考えてあると思う。