- SISC - Second Interpreter of Scheme Code
- The Kawa language framework
- JAKLD(Java版Scheme) - アルゴリズムとデータ構造入門
- Javaアプリケーション組み込み用のLispドライバ
- JScheme: Scheme implemented in Java
- Scheme処理系 Schluessel開発日誌
2011/11/05
JavaベースのScheme
ググった結果をざっくり
2011/09/02
「The Art of Unix Programming」と「Software Engineering Radio」
という2冊の本を読んでみたいなーと思っていたら、前者は公開されてた。英語だけど。
そのPDFらしいのも落ちてた。
日本語で読みたいけど高いんだよなぁ・・・。
あとこれもメモ。
2010/09/08
syntax-rules: define-overload (clojure の defn みたいなもの)
引数の数にマッチして呼び出される本体が変わる clojure の defn を思い出したので書いてみました。
書いてみると別にどうということはありませんね・・・。
なぜ define-overload という名前かというと、始めて defn を見たときの感想が C# のオーバーロードっぽいなぁだったので。。かっこいい名前が思いつきませんでした。そういや syntax-rules にも似てますよね。
まずはマクロを書く前に展開イメージを
以下マクロ本体
書いてみると別にどうということはありませんね・・・。
なぜ define-overload という名前かというと、始めて defn を見たときの感想が C# のオーバーロードっぽいなぁだったので。。かっこいい名前が思いつきませんでした。そういや syntax-rules にも似てますよね。
まずはマクロを書く前に展開イメージを
以下マクロ本体
labels :
clojure,
Gauche,
scheme,
syntax-rules
2010/07/07
プログラミング Clojure 読了
先日、遅ればせながら プログラミングClojure を読み始めました。
で、読み終わったわけですが、Clojure カッコイイですね!読了後の感想も上記のものと同様です。
次は何か別の本が読みたいですね。ということで、アドレナリンジャンキー プロジェクトの現在と未来を映す86パターン を読み始めました。
これまた @finalfusion さんに頂いた本です!
これまた @finalfusion さんに頂いた本です!
これ、めっちゃめちゃおもしろいです。乱暴に言うとソフトウェア開発の「あるある」。
2010/06/29
Re: Clojure カッコイイ!
そういえば先日、@shunsuk さんから「Clojure を使うメリットって何?」と聞かれました。困りました。
- S式で Java が書ける
- Java の経験があって Lisp が好きな人はうれしい
この二つしか思い浮かびませんでした・・・。結局、両方とも同じ意味ですよね。。個人的にはこれくらいしかメリットが思い浮かびませんでした。Clojure の特徴はいろいろあると思うのですが、「Clojure でないと困る」とか「こういう時は Clojure が最適!」っていうケースがあるのか正直わかりませんし知りません。
私自身も、これから Clojure をメインで使いたいとか、プログラミングClojure を読み終えてからさらに勉強してみたいとも思えませんし・・・。
プログラミングClojure を読み終わったらもう一度考えてみたいと思います。っていうか、教えてエロい人!
私自身も、これから Clojure をメインで使いたいとか、プログラミングClojure を読み終えてからさらに勉強してみたいとも思えませんし・・・。
プログラミングClojure を読み終わったらもう一度考えてみたいと思います。っていうか、教えてエロい人!
追記
やっぱり、JVM で走って Java と仲の良い Lisp だからってことで FA?
labels :
clojure
Clojure カッコイイ!
おもしろいページがあったのでメモ。
以下余談
遅ればせながら、プログラミングClojure を読んでいます。頂いてから随分経ってしまいました。。Clojure カッコイイですねぇ。おもしろいです。
今5章まで読んだところですが、5章(関数型プログラミング)とてもおもしろいです。
ここまでで良いなーと思った点は
ここまでで良いなーと思った点は
- 関数定義のコメント
- doc 関数
- 同名の関数で引数の数ごとに処理を記述できる(オーバーロードとか syntax-rules っぽいなーなどと)
- 型ヒント
- なんでもシーケンス
- なんでも遅延シーケンス
- Java の呼び出しが自然 (「S式で書ける Java」といった印象)
そういえば、多値とか継続はないっぽい?
やっぱり気になる。。といった点は
- 引数ベクタで[]しか使えない
- cond や let の括弧が少ない
両方とも好みの問題だと思います。1 は見る分には慣れてきました。書く時はやはり()で書けた方が好きです。2 は相変わらず見づらいです。でも両方とも大して気になりません。
書評
2010/06/24
syntax-rules: across (Clojure の .. ぽいもの)
プログラミングClojure P.62~ 「Clojure から Java を使う」より。
Java だと
scheme (gauche) の syntax-rules で書くと下記のような感じでしょうか。
良い名前が思いつきませんでした。当初は chain にしてましたが、なんとなく across に変えました。。
書いてみたコードは以下のようなもの。

(.getLocation (.getCodeSource (.getProtectionDomain (.getClass '(1 2)))))が
(.. '(1 2) getClass getProtectionDomain getCodeSource getLocation)と書けますよーということのようです。
Java だと
'(1 2).getClass().getProtectionDomain().getCodeSourse().getLocation();みたいなイメージで良いんでしょうかね。
scheme (gauche) の syntax-rules で書くと下記のような感じでしょうか。
良い名前が思いつきませんでした。当初は chain にしてましたが、なんとなく across に変えました。。
書いてみたコードは以下のようなもの。
追記
本家ソースはこれかな。
labels :
clojure,
Gauche,
scheme,
syntax-rules
2010/06/20
なんで Lisp/Scheme の変数名は長いの?
そういえば。さっきの記事を書き終わって思い出しました。shiro さんがこんなことを仰っていた。
ところで Clojure の meta ってなんだろ。プログラミングClojure P.54 の「メタデータ」のところのことかな。せっかく頂いたのにまだ読んでいない・・・。

Lisp/Schemeの変数名が長くなりがちなのは、変数名にしか読者への情報を乗せられないということもあるな。静的型なら型名に情報を乗せて、変数名自体は一文字でもけっこういける。なるほどー。
だが型情報だけが乗せたい情報というわけでもない。とすれば一般的にメタ情報を乗せる仕組みをつくればいいか?
Clojureのmetaはそういう仕組みではあるな。
ところで Clojure の meta ってなんだろ。プログラミングClojure P.54 の「メタデータ」のところのことかな。せっかく頂いたのにまだ読んでいない・・・。
追記
長いシンボルを補完できるエディタがあったからだと思います RT @valvallow: なんで Lisp/Scheme の変数名は長いの? http://ff.im/-moAHF
@wasabiz それもあるけど、組み込み関数の命名とかさ。Common Lispは「クソ長い」の。AT&TのC文化圏では「命名は短く」ってのがあって、それはテキストエディタで打つとメンドくせえし間違えるから。CLは関数名を「自動補完で記述する」前提があるんですよ。
追記
- vallog: Gauche: use してる module から export されてる symbol たち
- vallog: 初期状態で見えているsymbolたち(Gaucheのuserモジュール)
- vallog: Gaucheのmoduleとdefine-in-moduleとevalで作るsandbox
2010/01/08
Clojure + slime + meadow

しかし私は今ニートなので購入するか(あるいはできるのか)非常に悩ましいところです。
とりあえず環境を作って少ーし試してみました。
少し試して疲れたので続きはまた今度。
環境は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")
登録:
投稿 (Atom)