すべての要素を通過して操作を適用するマップ関数を作成しようとしています。これは単純にmap
関数に似ていますが、より深くなります。
この関数は 2 つの引数を取ります。1 つの関数と引数用の 1 つ。
これが私がこれまでに持っているものです:
(defn go-through
[op & args]
(if-not (sequential? (first args))
(apply op args)
(apply (partial map go-through op) args)))
そして、最後の行は、呼び出さなくても機能しないことを知っていました。しかし、私は他の方法を知りません。
提案?
おそらく、そのような機能の使用を制限しています。
サンプル:
user=> (go-through + 1 2)
3
user=> (go-through + [1 2] [3 4])
IllegalArgumentException Don't know how to create ISeq from: clojure.core$_PLUS_ clojure.lang.RT.seqFrom (RT.java:494)
私は期待していました[4 6]
アイデアは、シーケンシャルではなく、単一の要素で動作するすべての関数に適用できるということです。