gpt4 book ai didi

clojure - 两个函数相互递归调用

转载 作者:行者123 更新时间:2023-12-03 00:26:38 24 4
gpt4 key购买 nike

是否可以在 clojure 中定义两个相互递归调用的函数?例如,这一对:

(defn a [x]
(if (= 0 x) 0 (b (dec x))))

(defn b [x]
(if (= 0 x) 0 (a (dec x))))

编译失败:

Unable to resolve symbol: b in this context

因为当我尝试在 a 中调用它时,我还没有定义 b

例如,在 ruby​​ 中,这工作得很好:

def a(x)
x == 0 ? x : b(x-1)
end

def b(x)
x == 0 ? x : a(x-1)
end

最佳答案

或者:

(声明 b) ... ;然后可以按原样使用其余代码

或者:

(def mutual
(letfn [(a [ ... ] ...)
(b [ ... ] ...)]
[a b]))

(def a (first mutual))
(def b (second mutual))

关于clojure - 两个函数相互递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18421453/

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