簡體   English   中英

將函數序列映射到序列

[英]Map sequence of functions to a sequence

如何將函數序列中的每個函數映射到值序列中的相應值?:

(map '(sequence of functions) '(sequence of values))

函數序列中的第n個函數應該應用於值序列中的第n個值。 對不起,如果我不是很清楚。

例如,說(def fns '(#(+ 1 %) #(- 1 %)) )

那么(map (some-clever-function-of fns) '(0 0))會產生(1 -1)因為#(+ 1 %)被映射到第一個0而#(- 1 %)被映射到第二個。

  • 傳遞map多個參數序列,它將完全符合您的要求。 (map f seq1 seq2)期望f是一個帶有兩個參數的函數; mapseq1的第一個元素和seq2的第一個元素傳遞給f ,然后是每個元素的第二個元素等。一旦任何參數seq用完, map停止,所以這也適用於無限序列。
  • 考慮使用向量而不是引用列表。 向量突出顯示為“數據”而不是“代碼”,您不必引用它們。
  • 您的示例函數不能執行您想要的操作; 兩者都返回1.我懷疑你的意思是#(+ % 1)#(- % 1) 這兩個都在clojure.core ,分別稱為incdec

所以:

user> (map (fn [f x] (f x)) 
           [inc dec] 
           [0 0])
(1 -1)

要么:

user> (map #(%1 %2) [inc dec] [0 0])
(1 -1)

我通常定義一個invoke函數,其作用類似於apply但沒有list-collapsing:

(defn invoke [f & args]
  (apply f args))

(map invoke [+ -] [1 2] [3 4])
(4 -2) ; 1 + 3, 2 - 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM