這是計算素數值的書Programming Clojure (2nd edition)中的示例代碼。使用Clojure中的let/fn匹配參數
(def primes
(concat
[2 3 5 7]
(lazy-seq
(let [primes-from
(fn primes-from [n [f & r]]
(if (some #(zero? (rem n %))
(take-while #(<= (* % %) n) primes))
(recur (+ n f) r)
(lazy-seq (cons n (primes-from (+ n f) r)))))
wheel (cycle [2 4 2 4 6 2 6 4 2 4 6 6 2 6 4 2
6 4 6 8 4 2 4 2 4 8 6 4 6 2 4 6
2 6 6 4 2 4 6 2 6 4 2 4 2 10 2 10])]
(primes-from 11 wheel)))))
該代碼的結構定義了一個本地函數primes-from
用於let形式。
(def primes
(concat
[2 3 5 7]
(lazy-seq
(let [primes-from (fn primes-from [n [f & r]] ... ]
(primes-from 11 wheel)))))
但是,我不知道怎麼的第一個參數11
,第二個參數wheel
匹配到[primes-from (fn primes-from [n [f & r]] ... ]
結構。
另外,我看不到primes-from
參數在定義匿名函數(fn primes-from [n [f & r]]
。
對此代碼的任何解釋?