Clojureの中に「インターポーザ」関数の奇妙な行動

エルトゥールルCetin:

私は最後に、いくつかのデータと使用インターポーザ操作しました。それはのようないくつかの文字に来るときしかし、それは違った行動〜 `、

予想される行動

(interpose '! ["a" "b" "c"])
=> ("a" ! "b" ! "c")

(interpose 'k ["a" "b" "c"])
=> ("a" k "b" k "c")

(interpose '- ["a" "b" "c"])
=> ("a" - "b" - "c")

期待できない行動(彼らは代わりにデータ結果の関数を返します)

(interpose ', ["a" "b" "c"])
=> #object[clojure.core$interpose$fn__6471 0x6f0c27f3 "clojure.core$interpose$fn__6471@6f0c27f3"]
(interpose '` ["a" "b" "c"])

=> #object[clojure.core$interpose$fn__6471 0x7b94fbcb "clojure.core$interpose$fn__6471@7b94fbcb"]
(interpose '~ ["a" "b" "c"])

=> #object[clojure.core$interpose$fn__6471 0x36966945 "clojure.core$interpose$fn__6471@36966945"]
cfrick:

これらの文字は、すべてのClojureで特別な意味を持っている、あなたは単純に引用符でそれらを入力することはできません。だから彼らは、読者によってその意味で処理された後、あなたの'引用は、次のフォームに使用されます。これは全ての一アリティバージョン呼び出すコードにつながるinterposeので、あなたが結果として表示さ機能が得られ、その後、あなたにトランスデューサを与えるだろう、。

あなたはシンボルとしてこれらの文字を持っているしたい場合は、使用することができますsymbol例えば

user=> (interpose (symbol ",") ["a" "b" "c"])
("a" , "b" , "c")

これらの文字の意味は以下のとおりです。

:基本的に、このような予期しない動作のルックスと結果のコード

user=> `(interpose ', ["a" "b" "c"])
(clojure.core/interpose (quote ["a" "b" "c"]))
user=> `(interpose '` ["a" "b" "c"])
(clojure.core/interpose (quote (clojure.core/apply clojure.core/vector (clojure.core/seq (clojure.core/concat (clojure.core/list "a") (clojure.core/list "b") (clojure.core/list "c"))))))
user=> `(interpose '~ ["a" "b" "c"])
(clojure.core/interpose (quote ["a" "b" "c"]))

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=377975&siteId=1