Clojure

その他の便利な関数とマクロ

関数の作成

関数 式の例 戻り値

fn

(map (fn [x] (+ 2 x)) [1 2 3])

(3 4 5)

#() reader マクロ

(map #(+ 2 %) [1 2 3])

(3 4 5)

partial

(map (partial + 2) [1 2 3])

(3 4 5)

comp

(map (comp - *) [2 4 6] [1 2 3])

(-2 -8 -18)

complement

(map (complement zero?) [3 2 1 0])

(true true true false)

constantly

(map (constantly 9) [1 2 3])

(9 9 9)

印刷

*out*の現在の値である出力ストリームにオブジェクトを出力するためのいくつかの関数が提供されています。-str バージョンは *out* を StringWriter にバインドし、そこに印刷して、結果の文字列を返します。 pr は、オブジェクトが複数ある場合はスペースで区切ってオブジェクトを出力します。 prn は同じことを行い、その後に 改行を続けます。printprintln はそれぞれ prprn を呼び出し、*print-readably*(デフォルトは true)を nil にバインドします。これにより、文字列は引用符やエスケープ文字エンコーディングなしで出力され、文字は先頭の '\' やエスケープ文字エンコーディングなしで出力されます。デフォルトでは、prprn はリーダーがオブジェクトを読み取れるように出力しますが、printprintln は人間が消費するための出力を生成します。*print-readably* が nil でない場合、メタデータの印刷は *print-meta* によって切り替えられます。これはデフォルトでは nil です。

*out* に出力: pr prn print println newline
文字列に出力: pr-str prn-str print-str println-str with-out-str

正規表現のサポート

正規表現パターンは、#"pattern" リーダーマクロを介して読み取り時にコンパイルすることも、re-pattern を使用して実行時にコンパイルすることもできます。どちらの形式も java.util.regex.Pattern オブジェクトを生成します。

user=> (re-seq #"[0-9]+" "abs123def345ghi567")
("123" "345" "567")
user=> (re-find #"([-+]?[0-9]+)/([0-9]+)" "22/7")
["22/7" "22" "7"]
user=> (let [[a b c] (re-matches #"([-+]?[0-9]+)/([0-9]+)" "22/7")]
         [a b c])
["22/7" "22" "7"]
user=> (re-seq #"(?i)[fq].." "foo bar BAZ QUX quux")
("foo" "QUX" "quu")