2010/01/08

Clojure + slime + meadow





2010/01/25にgaucheハッカーと画家の訳者であるshiroさん訳でProgramming Clojureの日本語訳が出るそうなので欲しいところです。
しかし私は今ニートなので購入するか(あるいはできるのか)非常に悩ましいところです。
とりあえず環境を作って少ーし試してみました。
少し試して疲れたので続きはまた今度。

環境はclojure boxが手っ取り早いです。



実はclispとslimeを突っ込んではいたもののほとんど触っておらず、slimeの使い方がまだいまいちよくわかりません。

ところでClojureってCommon LispでもSchemeでもないそうですね。Arcなんかと同様、新しいLispの方言ってとこなんでしょうかね?

今回は以下のページを見ながらぽちぽち書いて、なるほど動くな、と試してみた程度。
clojureはGAEで動くらしいのでやっぱやってみたいですよね。
ついでにGAEのSDKも整備してdemoを動かして「すげー」しました。



(defn dbl [x]
  (* x x))
;; C-c C-c

(dbl 5)
;; C-x C-e
; -> 25

; SLIME 2010-01-06
user> (dbl 5)
25
user>


; factorial
(defn fact [n]
  (if (= n 0)
    1
    (* n (fact (- n 1)))))

user> (fact 10)
3628800

user> (+ 1 2)
3
user> (println "hello, world")


(defn hello [name]
  (println "Hello, " name))

(def vowel? (set "aeiou"))
(defn pig-latin [word]
  (let [first-letter (first word)]
    (if (vowel? first-letter)
      (str word "ay")
      (str (subs word 1) first-letter "ay"))))

(println (pig-latin "red"))
; -> edray

(println (pig-latin "orange"))
; -> orangeay


(require 'clojure.contrib.str-utils)
(doc clojure.contrib.str-utils/str-join)
; ->
;; -------------------------
;; clojure.contrib.str-utils/str-join
;; ([separator sequence])
;;   Returns a string of all elements in 'sequence', separated by
;;   'separator'.  Like Perl's 'join'.


(let [x 1]
  (let [x 3]
       (println (str "x = " x))))
; -> x = 3

(count [1 2 "three" 4 5])
; -> 5

(reverse [5 4 3 2 1])
; -> (1 2 3 4 5)

(map #(+ % 3) [2 4 6])
; -> (5 7 9)

(map + [2 4 7][5 6][1 2 3 4])
; -> (8 12)

(map + [1 2 3][1 2 3][1 2 3])
; -> (3 6 9)

(apply + [1 2 3 4 5 6 7 8 9 10])
; -> 55

(def languages
     ["lisp" "scheme" "clojure" "arc"])

(first languages)
; -> "lisp"
(second languages)
; -> "scheme
(third languages)
; -> errorr?
(last languages)
; -> "arc"
(nth languages 0)
; -> "lisp"
(nth languages 3)
; -> arc

(next languages)
; -> ("scheme" "clojure" "arc")
(butlast languages)
; -> ("lispp" "scheme" "clojure")
(drop-last 2 languages)
; -> ("lisp" "scheme")
(filter #(> (count %) 3) languages)
; -> ("lisp" "scheme" "clojure")



ハッカーと画家 コンピュータ時代の創造者たちProgramming Clojure (Pragmatic Programmers)Practical Clojure (The Definitive Guide)プログラミングClojure



0 件のコメント:

コメントを投稿