clojure懒惰序列和letfn

Jay*_*Zee 2 recursion clojure

我在Clojure尝试一些懒惰的流.如果我做:

(defn ints-from [n]
   (cons n (lazy-seq (ints-from (inc n)))))
Run Code Online (Sandbox Code Playgroud)

(def nats (ints-from 0))
Run Code Online (Sandbox Code Playgroud)

没关系,我可以这样做:

(take 5 nats)
Run Code Online (Sandbox Code Playgroud)

现在我试图将2个函数封装在1中:

(defn natz[]
( letfn   [(aux [n]((cons n (lazy-seq (aux (inc n)))))) ] (aux 0) ))
Run Code Online (Sandbox Code Playgroud)

这似乎是编译,但没有做我期望的.

(take 4 natz)
Run Code Online (Sandbox Code Playgroud)

得到:

(user=> IllegalArgumentException Don't know how to create ISeq from: user$natz    
clojure.lang.RT.seqFrom (RT.java:494)
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

tan*_*mer 5

letfn定义中的一个括号较少,而一个括号更多来调用natz函数

(defn natz[]
  (letfn [(aux [n] (cons n (lazy-seq (aux (inc n)))))]
    (aux 0)))
Run Code Online (Sandbox Code Playgroud)

用法示例:

(take 4 (natz))
=> (0 1 2 3)
Run Code Online (Sandbox Code Playgroud)