2011-01-17 14 views
26

現在、少なくとも1つの整数を含むコマンドラインからテキストファイルを読み込む必要がある問題があります。私はファイルを読み込み、正規表現マッチを行い、空白を無視します。文字列のシーケンスを整数に変換する(Clojure)

(re-seq #"[0-9]+" (slurp (first *command-line-args*))) 

これ以降、この一連の文字列を整数のシーケンスに変換するだけで、関数全体を記述する必要があります。どうやら私はInteger.をシーケンスにマップすることはできません(私がマップを間違って使用していない限り)。

これを扱ういくつかのエレガントな方法がありますか?マップに似ていますか?または、これを動作させるには、最初に再帰的にポップしてInteger.にキャストする必要がありますか?

私は現在Clojureを勉強しています。私は少し学びますが、私は戻って、少しプログラマのクイズをして、私は他の言語を手に入れました。

答えて

45

あなたはInteger/parseIntを探しています。

user=> (map #(Integer/parseInt %) ["1" "2" "3" "4"]) 
(1 2 3 4) 

Javaメソッドは機能ではないため、Integer/parseIntを無名関数にラップする必要があります。

read-stringは、この場合にも動作します:

user=> (map read-string ["1" "2" "3" "4"]) 
(1 2 3 4) 

read-stringは、文字列だけではなく、整数からいかなるオブジェクトを読み込みます。あなたが(read-string "1.0")をやったなら、二重に戻ってしまうでしょう。外部のソースから読むときは、何が必要なのかを正確に読み取ることができます。この場合は整数です。したがって、私は最初の例を使用することをお勧めします。

+0

ああ、それは動作します!ありがとうございました! –

+2

+1読み取り文字列については考えていませんでしたが、そのようなものがあることが分かっていました – twneale

+1

これは非常にうまく動作しますが、JVMでclojureが実行されている場合のみです。 ClojureCLRが –

関連する問題