RICH HICKEY氏の発言がめちゃくちゃ面白かったので、Clojureを学ぶことにしました。
めちゃくちゃ面白い。字が小さくてスマフォだとつらいので、あとで読もう / “[ GitPitch ] k2n/effective-programs-ja/master” https://t.co/fl9VSi4K14
— ぎゃばん (@ledsun) 2017年11月8日
この資料は、RICH HICKEY氏の発表を解説してくれる勉強会の資料のようです。 clj-nakano.connpass.com 該当会には参加していませんん。
環境を作る
leiningenというものを作ると環境構築が簡単なようです。
brew install leiningen lein --version Leiningen 2.8.1 on Java 1.8.0_25 Java HotSpot(TM) 64-Bit Server VM
REPL
REPLがあります。
lein repl
で起動します。
~ lein repl ~ nREPL server started on port 58165 on host 127.0.0.1 - nrepl://127.0.0.1:58165 REPL-y 0.3.7, nREPL 0.2.12 Clojure 1.8.0 Java HotSpot(TM) 64-Bit Server VM 1.8.0_25-b17 Docs: (doc function-name-here) (find-doc "part-of-name-here") Source: (source function-name-here) Javadoc: (javadoc java-object-or-class-here) Exit: Control+D or (exit) or (quit) Results: Stored in vars *1, *2, *3, an exception in *e user=>
Hello Woldしてみます。
user=> (println "hello world") hello world nil
1から10までを足す
簡単なお題で練習してみます。
足し算
user=> (+ 1 2 3 4 5 6 7 8 9 10) 55
和の公式で
user=> (/ (* (+ 1 10) 10) 2 ) 55
再帰呼び出し
user=> (defn sum #_=> [list] #_=> (if (= (count list) 0) #_=> 0 #_=> (+ (first list) (sum (rest list))))) #'user/sum user=> (sum [1 2 3 4 5 6 7 8 9 10]) 55
再帰が深くなる場合は、末尾最適化をしないといけないらしいです。
reduce関数
user=> (reduce + [1 2 3 4 5 6 7 8 9 10]) 55