我认为这是一个非常简单的问题,但是我似乎无法在线找到答案:如何从Clojure序列的每个元素中减去n
?例如,从(6 9 11)的每个元素中减去4,得到(2 5 7)?
我认为应该使用map
完成此操作,并且我知道对于减1的特殊情况,我可以(map dec (sequence))
做,但是对于其他情况我该怎么做呢?
对于它的价值,我最终发现(map - (map (partial - n) (sequence))
在技术上确实有效,但是显然这并不是要完成的。
对于在搜索中落入此处并有稍微不同的问题的任何人:如果要从 n中减去Clojure序列的每个元素,则可以使用 类似地,要将Clojure序列的每个元素乘以 用于将 我在these Clojure docs中找到了这个答案,所以我认为这是惯用的,但是显然我自己不能为此提供担保。(map (partial - n) (sequence))
>
n
,您可以执行(map (partial * n) (sequence))
n
添加到Clojure序列(map (partial + n) (sequence))
的每个元素中
答案 0 :(得分:2)
在这里方便使用匿名函数文字:
> (map #(- % 4) [6 9 11])
(2 5 7)
#(- % 4)
形式是
> (map (fn [x] (- x 4)) [6 9 11])
(2 5 7)
答案 1 :(得分:0)
如果您要为所需的功能寻找combinatory表达式,请尝试(comp - (partial - 4))
:
=> (map (comp - (partial - 4)) '(6 9 11))
(2 5 7)
请记住,+
和-
只是普通的命名Clojure函数。您所需的功能可能不值得命名,因此您可以直接将其表示为#(- % 4)
或(fn [n] (- n 4))
或以上形式。
还应该记住map
是惰性的,因此可以处理无尽的序列:
=> (take 10 (map (comp - (partial - 4)) (range)))
(-4 -3 -2 -1 0 1 2 3 4 5)
答案 2 :(得分:-1)
这可以通过地图来实现。 Clojure映射采用函数和列表作为参数。 Synatax:
(地图(函数)(序列))
test=> (map (fn[arg] (- arg 4) ) '(7 8 9) )
(3 4 5)
test=> (map (fn[arg] (- arg 4) ) [7 8 9] )
(3 4 5)
地图也可以使用简写形式。
(-%4)
。这里%是参数传递。默认为第一个参数。 %1明确地说出第一个参数
test=> (map #(- %1 4) [7 8 9])
(3 4 5)
test=> (map #(- % 4) [7 8 9])
(3 4 5)