gpt4 book ai didi

function - clojure 函数循环依赖是设计明确禁止的,还是只是读者行为?

转载 作者:行者123 更新时间:2023-12-04 09:37:55 24 4
gpt4 key购买 nike

如果我在 clojure 中执行以下操作

(defn sub1a [a]
(cond
(= a 0) 0
true (sub1b (- a 1) )))

(defn sub1b [a]
(cond
(= a 0) 0
true (sub1a (- a 1) )))

(println (sub1a 10))

我收到以下错误:
java.lang.Exception: Unable to resolve symbol: sub1b in this context

但是,如果我执行以下操作:
(defn sub1a [a]
(cond
(= a 0) 0
true (- a 1)))

(defn sub1b [a]
(cond
(= a 0) 0
true (- a 1)))

(defn sub1a [a]
(cond
(= a 0) 0
true (sub1b (- a 1) )))

(defn sub1b [a]
(cond
(= a 0) 0
true (sub1a (- a 1) )))

(println (sub1a 10))

它运行得很好。

这是设计使然,还是仅仅是 Clojure 阅读器工作方式的一个功能?

最佳答案

你可以做

(declare sub1a sub1b)

'declare' 专门用于创建一个没有绑定(bind)的 var 来进行前向声明。

你声明了一个名字:
(defn sub1a [a]
(cond
(= a 0) 0
true (sub1b (- a 1) )))

(defn sub1b [a]
(cond
(= a 0) 0
true (sub1a (- a 1) )))

(println (sub1a 10))

此外,在 cond(对于 clojure)中指定默认条件的惯用方式是使用 :else 子句。这与使用 T(表示 True)的 Common Lisp 有点不同。所以你之前的代码可以重写为:
(defn sub1a [a]
(cond
(= a 0) 0
:else (sub1b (- a 1) )))

...

关于function - clojure 函数循环依赖是设计明确禁止的,还是只是读者行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3433962/

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