Relevant options with let / fn in Clojure

This is sample code from Clojure Programming (Second Edition) , which calculates the basic values.

(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)))))

The code has a structure that defines a local function primes-fromto use in the let form.

(def primes
  (concat
   [2 3 5 7]
   (lazy-seq
    (let [primes-from (fn primes-from [n [f & r]] ... ]
      (primes-from 11 wheel)))))

However, I am not sure how the first parameter 11and the second parameter wheelcorrespond to the structure [primes-from (fn primes-from [n [f & r]] ... ].

Also, I don't see how the parameter primes-fromdefines an anonymous function (fn primes-from [n [f & r]].

Any explanation about this code?

+4
source share
1 answer

letdefines primes-fromto indicate the function defined by fn.

primes-from , 11 n, wheel [f & r]. wheel , [f & r] - , . f ( "first" ) , . & , r ( "rest" ) ( 4 ).

(cycle , r .)

" " (let [primes-from ... " " (fn primes-from .... - , primes. - , fn. "primes-from" , .

( , fn . recur, primes-from. primes-from, recur, , , , . recur , .. . recur, cons lazy-seq.)

+4

All Articles