Common Lispでiotaを定義(シンプルに改変) | ~magi mode~ver3.10

~magi mode~ver3.10

マジックの練習は辞めて今はパソコンばかりいじっている。
アニメ好きだがオシャレも好き。
二次元と三次元の両立を図る日々。
最近トレーニングにもハマってる。

「<a href="http://ameblo.jp/magi-alphard/entry-11220357507.html" target="_blank">Common Lispでマイiotaを定義(修正)</a>」
の、続きみたいなもん。
loop文を学んだのでloop文とif文で書いてみた。
ただloop文は「LISPっぽくない」という理由で人によっては敬遠するらしい。
まぁ自分はその辺こだわりもないし、使えるときは使ってみようかな。

#####################################################

(defun iota (start end)
   (if  (> start end)    
         (loop for ans from start downto end collecting ans)
         (loop for ans from start to end collecting ans) ))

(print (iota (read) (read)))

#####################################################
なんと。
あれほど長かったマイiotaがたったこんだけで書けるとは。
実にシンプル。
loop文は英文っぽいためわかりやすい。それゆえプログラミングっぽくないよね。
それとif文は初めて使った。
condと違って2分岐しかできないけど、condより短く書けるね。
でもcondの方がわかりやすくて好きだなぁ。
まぁこれはこれでよし。スマートだ。