ラベル clojure の投稿を表示しています。 すべての投稿を表示
ラベル clojure の投稿を表示しています。 すべての投稿を表示

2010/05/17

MacのEmacs「Aquamacs」にSwank Clojureをインストールする

Aquamacsの2.0がリリースされたらしいので使ってみたいと思います。AquamacsについてはSourceForgeのニュース記事にいろいろ書かれています。今までClojureのコードを書くときはEclipseのCounterclockwiseを使っていました。Emacsは何度か挑戦して、何度も挫折してます…。
ということで、AquamacsでSwank Clojureを動かしてみます。

Aquamacsをインストール

http://aquamacs.org/からダウンロードして、インストール。

ELPAを使う

ELPAはEmacs LispのPackage Archiveらしいです。これを使ってSwank Clojureをインストールします。

まずAquamacsを立ち上げ、*scratch*バッファに以下のコードを入力します。


そしてコードの最後にカーソルを移動して、C-x C-eを実行する。その後M-x package-list-packagesでエンターキーを押すと、使用可能なパッケージのリストが表示されます。
ELPAでM-x package-list-packagesを実行したときのスクショ
こんな感じ。

Swank Clojureをインストール

ELPAのパッケージリストにカーソルがあることを確認した後、cmd-fを押し、「swank-clojure」とタイプします。これでリストの中でswank-clojureを見つけることができます。そしてswank-clojureをインストールすることを明示するため、その場でiを押し、xを押してインストールを開始します。
インストールが終わるとWarningエラーがいくつか出ますが、気にしなくて良いっぽいです。

以上です。

参考サイト

Install Clojure on Mac OS X and Aquamacs — Michael Schneider

2010/02/26

Clojureのcontains?関数

contains?関数はコレクションにキーが存在するかどうかを確かめるために使う。
> (contains? {:h "hoge" :f "fuga"} :h)
true
だから下のコードのように値の存在を確かめることはできない。
> (contains? ["hoge" "fuga"] "hoge") ; 値を指定
false
> (contains? ["hoge" "fuga"] 0) ; キーを指定
true
値の存在を確かめるにはsome関数を使うのが良さそう。
> (some #(= "hoge" %) ["hoge" "fuga"])
true
> (some #(= "hoge" %) (vals {:h "hoge" :f "fuga"}))
true
ただこの場合、存在しなかったときはfalseではなくnilが返ってくる。
> (some #(= "durarara" %) (vals {:h "hoge" :f "fuga"}))
nil
(contains? ["x","y"] "x") => false; Works as designed. This design confuses me. #clojure #novice
というTweetを見かけたので書いてみました。

追記(2010/02/27 00:06):
(some #(= x %) coll)の代わりになるincludes?という関数がclojure.contrib.seq-utilsに用意されていた。こっちのほうがスマートかも。
> (use '[clojure.contrib.seq-utils :only (includes?)])
nil
> (includes? ["hoge" "fuga"] "hoge")
true
> (includes? (vals {:h "hoge" :f "fuga"}) "hoge")
true
> (includes? (vals {:h "hoge" :f "fuga"}) "durarara")
false

追記(2010/02/27 00:38):
動作環境は、Clojure 1.1.0とclojure-contrib 1.1.0です。

2010/02/21

Clojure用ビルドツールのLeiningenをインストールする

環境
  • Mac OS X 10.5.8
  • Java 1.6.0_17
  • Leiningen 1.1.0
流れ
以下のコマンドを実行する。
$ cd /usr/local/bin/
$ wget http://github.com/technomancy/leiningen/raw/stable/bin/lein
$ sudo chmod a+x lein
$ sudo lein self-install
おしまい。

2010/01/18

Common Lispの「#'」オペレータはClojureでいうなに?

Clojureを勉強しようと思って「On Lisp」を読み始めました。Common Lispで書かれているソースコードをClojureに翻訳しながら読もうというたくらみです。
で、さっそくつまずきました。p.12-13にこんなコードがありました。
> (defun double (x) (* x 2))
> #'double
#<Interpreted-Function C66ACE>
このプログラムの「#'」オペレータをClojureでどう書くのかがわかりません。でも見た感じ、type関数に近いような気がします。
> (type double2)
chap02.defun$double2__124
> (type 10)
java.lang.Integer
doubleという関数を定義しようとしたらエラーになったので、double2にしました。
…うーん、やっぱり違うかも。