gpt4 book ai didi

clojure - 初学者 Clojurist 惰性序列错误 : Don't know how to create ISeq from: java. lang.Long

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:38 24 4
gpt4 key购买 nike

我是 Clojure 和 Lisp 的新手,但到目前为止很喜欢。我目前正在尝试了解 lazy-seq 和 Clojure 定义无限序列的能力。我有以下代码:

(defn geometric
([] geometric 1)
([n] (cons n (lazy-seq (geometric (* n 1/2))))))

如果我运行:

(geometric)

在我的 REPL 中,它按预期返回 1。但是,如果我运行,

(take 10 (geometric))

我收到以下错误:

IllegalArgumentException Don't know how to create ISeq from:
java.lang.Long clojure.lang.RT.seqFrom

我期望得到的是:

(1 1/2 1/4 1/8 1/16 1/32 1/64 1/128 1/256 1/512)

为什么会出现此错误?如果我理解正确,应该能够对惰性序列进行 cons n 处理,并且 take 应该返回序列的前十个值,递归计算。

最佳答案

我最喜欢的函数之一:iterate 接受一个函数 f 和一个值 x 返回 x, (f x), ( f (f x), (f (f (f x)))

这是一个具有相同功能的优雅实现:

(defn geometric []
(iterate #(/ % 2) 1))

不是对您问题的直接回答,但希望能提供信息!

关于clojure - 初学者 Clojurist 惰性序列错误 : Don't know how to create ISeq from: java. lang.Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37036195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com