gpt4 book ai didi

clojure - Clojure 中的 setf

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

我知道我可以在 Common Lisp 中执行以下操作:

CL-USER> (let ((my-list nil))
(dotimes (i 5)
(setf my-list (cons i my-list)))
my-list)
(4 3 2 1 0)

我如何在 Clojure 中执行此操作?特别是,如果没有 Clojure 中的 setf,我该如何做到这一点?

最佳答案

我个人对你在 Common Lisp 中所做的事情的 Clojurewise 翻译是:

(into (list) (range 5))

结果是:

(4 3 2 1 0)

一点解释:

into 函数将所有元素连接到一个集合中,这里是一个用 (list) 创建的新列表,来自其他集合,这里是范围 0 .. 4conj 的行为因数据结构而异。对于列表,conj 的行为与 cons 相同:它将一个元素放在列表的头部并将其作为新列表返回。所以这是做什么的:

(cons 4 (cons 3 (cons 2 (cons 1 (cons 0 (list))))))

这与您在 Common Lisp 中所做的类似。 Clojure 的不同之处在于我们一直在返回新列表,而不是更改一个列表。只有在 Clojure 中真正需要时才使用 Mutation。

当然你也可以马上得到这个列表,但这可能不是你想知道的:

(range 4 -1 -1)

(reverse (range 5))

或者……我能想出的最短的版本:

'(4 3 2 1 0)

;-).

关于clojure - Clojure 中的 setf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8540855/

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