[英]Clojure vector as function parameter
由於完全缺乏clojure經驗,並且自大學以來沒有任何函數式編程實踐,我試圖解釋一些示例代碼來找出clojure語法。
我開始編寫幾個版本的Fibonacci( https://gist.github.com/pcalcao/ea4176719d778ea3ab9e ),但我仍然不能說我完全理解更復雜的形式。
例如,這個:
(defn fib_map [n]
(last (take (+ n 1)
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))))
我很難真正理解這段代碼的最內層部分:
fn [[a b]] [b (+ a b)]
現在,根據我的理解,我們正在創建一個匿名函數,它接收一個參數,一個帶有兩個值的向量(這是解構,對吧?),然后返回另一個向量。
現在,我們這樣做的原因是什么,而不是:
fn [a b] [b (+ a b)]
這些是等價的嗎? 或者我們只是讓我們的匿名函數接收一個參數作為iterate
使用的“噱頭”?
對不起,如果這是非常明顯的,但就像我說的那樣,類似Lisp的語言還不是我的強項。
你已經自己弄清楚了。
形式(fn [[ab]] ...)
正在使用解構。 它需要一個參數,它應該是一個矢量或支持clojure的nth
函數的另一種類型的對象。 使用解構,它將前兩個值“拉”出向量並將它們分配給局部變量a
和b
。
形式的函數(fn [ab] ...)
是兩個參數的函數。 這兩者並不相同。
你必須在iterate
使用(fn [[ab]] ...)
形式的原因是iterate
僅適用於單參數函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.