@ledsun blog

無味の味は佳境に入らざればすなわち知れず

Clojureを学ぶ

RICH HICKEY氏の発言がめちゃくちゃ面白かったので、Clojureを学ぶことにしました。

この資料は、RICH HICKEY氏の発表を解説してくれる勉強会の資料のようです。 clj-nakano.connpass.com 該当会には参加していませんん。

環境を作る

leiningenというものを作ると環境構築が簡単なようです。

MacではHomebrewからインストール可能です。

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