ringとか使ってました。

感想は「始めやすいlisp」という感じでした。

同じことをruby、scheme、clojure(末尾再帰最適化なし・あり)で書いてみました(短いのであまり参考にはならないかもしれませんが・・・)

def power (a, b) power_i(a, a, b) end def power_i (result, a, b) if b <= 1 result else power_i(result*a, a, b- 1 ) end end

2**4 でいいじゃん

( define ( power a b ) ( power-i a a b )) ( define ( power-i result a b ) ( if ( <= b 1 ) result ( power-i ( * result a ) a ( - b 1 ))))

初心者にはなんかややこしそうに見えます。

( defn power-i [ result a b ] (if ( <= b 1 ) result ( power-i ( * result a ) a ( - b 1 )))) ( defn power [ a b ] ( power-i a a b )) ( defn power-m [ a b ] (loop [ result 1 , b b ] (if ( <= b 0 ) result (recur ( * result a ) ( - b 1 )))))

括弧の種類が複数あって初心者に優しいです。 でも括弧の種類を変えるだけならschemeにもできる

今回のだとわからないですが、書き方によればリストなんて意識せずに書けます。

clojureファンの言い分

ruby 2.3.1p112 (2016-04-26 revision 54768) [x64-mingw32] Gauche scheme shell, version 0.9.4 [utf-8,wthreads], i686-pc-mingw32 Leiningen 2.7.1 on Java 1.8.0_111 Java HotSpot(TM) 64-Bit Server VM

文章の仕上がり微妙だな・・・

追記(2017-02-11)

ruby def power(a, b)

scheme (define (power a b)

clojure (defn power [a b]

括弧の囲い方がrubyとかに近いからかな？