假设我有一个函数f
接受两个参数 x & ý。我还有一个由 x 1 , x 2 元素组成的向量 X , ... x n 。
如何编写函数g
,其中 g ( X , y )调用 f 所有 x 的em>( x i , y )?
进一步说明:我希望g
返回一个向量,其中每个元素都存储 f 的结果( x i , y )。我的理解是,我应该考虑map或mapv。
答案 0 :(得分:2)
您可以使用map
来实施它。
我在这里使用lambda表达式来定义一个只接受一个参数的函数。
(defn f [x y ] (...) )
// apply f x y to every element of xs
// in order to do this we need a function which takes only one argument the x_i and takes the second argument from somehere else - the second argument of g
// that's what the lambda \x -> f x y does - in short form.
(defn g [xs y] (map (fn [x] (f x y)) xs))
例如
(def X [1 2 3 4])
(defn f [x y] (* x y))
(g X 3)
;=> (3 6 9 12)
答案 1 :(得分:1)
如果您可以重新排列f
的定义,以便y
是第一个参数,则可以这样做:
(defn f [y x] ...)
(map (partial f y) xs)
partial
会返回一个函数,其中y
是"烘焙在"作为f
的第一个参数。对于带有两个以上参数的函数,可以将其他参数传递给partial,并且返回的函数将接受任何尚未填充的参数的参数。
答案 2 :(得分:0)
以下是使用for
的简单方法:
(def y 5)
(def xx (range 5)) ;=> [0 1 2 3 4]
(defn ff [x y] (+ y (* x x)))
(defn gg [xx y] (for [x xx] (ff x y)))
(gg xx y)
;=> (5 6 9 14 21)
您也可以使用repeat
:
(defn g2 [xx y] (mapv ff xx (repeat y)))
(g2 xx y)
;=> [5 6 9 14 21]