gpt4 book ai didi

clojure - 迭代和重复应用函数之间的区别

转载 作者:行者123 更新时间:2023-12-03 00:37:04 28 4
gpt4 key购买 nike

我正在研究 Clojure Koans:

https://github.com/functional-koans/clojure-koans/blob/master/src/koans/10_lazy_sequences.clj

我被困在这个问题上:

"Iteration can be used for repetition"
(= (repeat 100 :foo)
(take 100 (iterate ___ :foo)))

我不知道用来填充 _ 空白的确切内置函数,所以我尝试编写自己的函数。我把它写成一个单独的函数作为测试。

我的意图是:如果 x 是一个 seq,则只需重复其第一个元素。否则,将其设为 seq。

(def f (fn [x] (if (seq? x) (cons (first x) x) (cons x '()))))

当我显式运行它时,它看起来很好:

user=> (f :abc)
(:abc)
user=> (f (f :abc))
(:abc :abc)
user=> (f (f (f :abc)))
(:abc :abc :abc)

但是使用iterate会添加一个额外的括号:

user=> (take 1 (iterate f :abc))(:abc)
user=> (take 2 (iterate f :abc))
(:abc (:abc))
user=> (take 3 (iterate f :abc))
(:abc (:abc) (:abc :abc))

What causes this?

最佳答案

(fn [x] x)

解决这个特定的公案

关于clojure - 迭代和重复应用函数之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12329588/

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