Skip to content

Instantly share code, notes, and snippets.

@masaedw
Created April 26, 2011 16:18
Show Gist options
  • Select an option

  • Save masaedw/942577 to your computer and use it in GitHub Desktop.

Select an option

Save masaedw/942577 to your computer and use it in GitHub Desktop.
趣旨
簡単なプログラムを通じて、
Clojureの基本的なライブラリを探訪しよう
www.4clojure.com
(= __ (.toUpperCase "hello world"))
=> "HELLO WORLD"
このサイトの問題を解けばClojureの
ライブラリの基本的な使い方が楽しく覚えられる!
Keyword :hoge
関数のようにも使えるシンボルのようなもの
関数として適用すると、
マップを引数にとり、自分自身をキーとする値を返す関数になる
セットを引数にとり、
セットに含まれていれば自分自身、
なければnilを返す関数になる
nil
nilは値がないことを示す値
空リストとは違う
(nil? nil) => true
(nil? ()) => false
だけど……clojureのnilは動作としては()と同じ
' (クオート)
car: first
cdr: rest
conj : cons なんだけど引数の順番が違う
conjは、計算量的に妥当な方向に要素を追加する
(-> '(1 2 3) (conj 4) (conj 5) (conj 6))
なんで -> なんてものがあるの?
(.toUpperCase "hello world")
;; これはJavaでいうところの
;; "hello world".toUpperCase()
(->
"hello world"
.toUpperCase
.toLowerCase)
これは、前の式の結果を次の式の最初の引数にする
一引数関数の場合は括弧が省略できる
(F# でいうところの |> と同じ)
lispっぽくないかもしれないけど、
oopになれている人、
あるいはそういうフレームワーク上で
プログラムを書くときに相性がいい
部分適用のように見えてそうでないから
haskellerから見るとすごい違和感がある
->> こういうマクロもある
(->> '(1 2 3)
(cons 0)
(cons -1)
(cons -2))
これは、前の式の結果を次の式の最後の引数にする
(haskellerも安心!)
(:name {....})
(:age {....})
clojure では関数をいろいろな方法で作れる
(fn [x] ...) いわゆる lambda
#() 関数リテラル
partial 部分適用
(fn [x] (first (reverse x)))
だるい
(comp first reverse)
Clojureのシーケンスは遅延評価
(.NETのIEnumerableと同じレベル)
みんなもClojureを使おう!
仕事でも使おう!
clojureかわいい
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment