我正在 Clojure 中尝试一些懒惰的流。如果我这样做:
(defn ints-from [n]
(cons n (lazy-seq (ints-from (inc n)))))
和
(def nats (ints-from 0))
这很好,我可以做这样的事情:
(take 5 nats)
现在我试图将 2 个函数封装在 1 中:
(defn natz[]
( letfn [(aux [n]((cons n (lazy-seq (aux (inc n)))))) ] (aux 0) ))
这似乎编译,但不做我所期望的。
(take 4 natz)
给予:
(user=> IllegalArgumentException Don't know how to create ISeq from: user$natz
clojure.lang.RT.seqFrom (RT.java:494)
我错过了什么?

letfn 定义中少了一个括号,多了一个括号来调用 natz 函数
(defn natz[]
(letfn [(aux [n] (cons n (lazy-seq (aux (inc n)))))]
(aux 0)))
示例用法:
(take 4 (natz))
=> (0 1 2 3)
本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处
评论列表(13条)