loop form

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っぽくないので、無意識のうちに不安に感じているのかもしれません。

でも、例のように繰り返し処理中に複数の値を保存しながら、最後に多値を返すこともできるのは軽くカルチャーショックでした。

人のソースが読めるくらいには、覚えたいです。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください