loop form
2007/06/27
common lispを触り始めてから再帰の練習のために、いろいろな問題をあえて再帰で考えるようにしていたら、lispで考える場合、ほとんどの繰り返しを再帰で考える方が自然に感じるようになっていました。
逆にloopとかdoを使うのが苦手になっていました。(自力では、Simple Loopを使うのがやっと)
loopもちょっと触ってみようとして、HyperSpecを眺めていたら、下のような例を見つけました。
;; Return both the count of collected numbers and the numbers. (loop for i from 1 to 10 when (> i 5) collect i into number-list and count i into number-count finally (return (values number-count number-list))) => 5, (6 7 8 9 10)
loop系の文は黒魔術的に感じていましたが、やっぱり今の自分には、黒魔術です。
loop keywordが、普通の英文のように現れてきます。カッコが少なくてlispっぽくないので、無意識のうちに不安に感じているのかもしれません。
でも、例のように繰り返し処理中に複数の値を保存しながら、最後に多値を返すこともできるのは軽くカルチャーショックでした。
人のソースが読めるくらいには、覚えたいです。