通过一系列函数与 seq 中的其他参数线程化数据结构
Threading a data structure through a series of functions with other params from a seq
这是对我之前问题的扩展 。
目的说明如下:
(defn foo
[x a-map]
(assoc a-map x "value"))
(defn -main
[x]
(let [[x1 x2 x3 ... xn] x]
(-> {}
(partial foo x1)
(partial foo x2)
(partial foo x3)
...
(partial foo xn))))
这个问题的复杂性在于我必须填充可变数量的偏函数,所以我不能使用 ->
或 'comp'。 foo
函数的真正机制当然不是 assoc
,所以我不能将问题简化为 zipmap
。
我不确定这是否重要,但输入参数 x
实际上是两个序列的笛卡尔积。所以 x
的每个元素都是一个二元素向量,它迭代两个序列的笛卡尔积 space 。它是使用 for
循环生成的,或者更确切地说,是列表推导式。
你有什么建议来处理这个问题?如果我没有提供一些重要信息,请告诉我。
干杯
首先,你对thread first ->
macro is incorrect (see for more info). Here is the right syntax using thread last ->>
macro的用法:
(->> {}
(foo x1)
(foo x2)
(foo x3)
(foo x4))
但是,除非向量的长度 x
是威慑力,否则它不会起作用。
但您可以在此处使用 reduce
function 来处理任何元素序列:
(reduce #(assoc %1 %2 "value") {} x)
这是一个完整的例子(稍微重新定义了 foo
函数):
(defn foo
[a-map x] ; reversed order of arguments
(assoc a-map x "value"))
(defn -main
[x]
(reduce foo {} x))
这是对我之前问题的扩展
目的说明如下:
(defn foo
[x a-map]
(assoc a-map x "value"))
(defn -main
[x]
(let [[x1 x2 x3 ... xn] x]
(-> {}
(partial foo x1)
(partial foo x2)
(partial foo x3)
...
(partial foo xn))))
这个问题的复杂性在于我必须填充可变数量的偏函数,所以我不能使用 ->
或 'comp'。 foo
函数的真正机制当然不是 assoc
,所以我不能将问题简化为 zipmap
。
我不确定这是否重要,但输入参数 x
实际上是两个序列的笛卡尔积。所以 x
的每个元素都是一个二元素向量,它迭代两个序列的笛卡尔积 space 。它是使用 for
循环生成的,或者更确切地说,是列表推导式。
你有什么建议来处理这个问题?如果我没有提供一些重要信息,请告诉我。
干杯
首先,你对thread first ->
macro is incorrect (see ->>
macro的用法:
(->> {}
(foo x1)
(foo x2)
(foo x3)
(foo x4))
但是,除非向量的长度 x
是威慑力,否则它不会起作用。
但您可以在此处使用 reduce
function 来处理任何元素序列:
(reduce #(assoc %1 %2 "value") {} x)
这是一个完整的例子(稍微重新定义了 foo
函数):
(defn foo
[a-map x] ; reversed order of arguments
(assoc a-map x "value"))
(defn -main
[x]
(reduce foo {} x))