gpt4 book ai didi

clojure - 用于在定义中自调用递归函数的通用函数

转载 作者:行者123 更新时间:2023-12-02 14:59:42 25 4
gpt4 key购买 nike

Clojure 中是否有类似于 recur 但可以使用非尾部位置的读取器宏或核心函数?

例如,在这个递归函数中

(defn insertR* [newkey oldkey l]
(cond
(empty? l) '()
(not (seq? (first l)))
(if (= (first l) oldkey)
(cons oldkey (cons newkey (insertR* newkey oldkey (rest l))))
(cons (first l) (insertR* newkey oldkey (rest l))))
:else
(cons (insertR* newkey oldkey (first l)) (insertR* newkey oldkey (rest l)))))

是否有一些通用函数可以用来调用自身,而不是显式调用 insertR*

最佳答案

你的问题不清楚。如果您的意思是:我可以在不使用堆栈空间的情况下执行此操作吗?不。您的 insertR* 有多个自调用,如果没有堆栈就不可能表达。

如果您的意思是:我可以使用像 recur 这样的词来表示“递归地调用自己”,并且我不在乎它是否使用堆栈吗?并不真地。不过你可以自己写。像这样的东西:

(defmacro defrec [name & fntail]
`(def ~name (fn ~'recurse ~@fntail)))

(defrec foo [x]
(when-not (zero? x)
(recurse (dec x))))

我怀疑这有一些漏洞,但它基本上符合你的想法。

关于clojure - 用于在定义中自调用递归函数的通用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6032074/

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