gpt4 book ai didi

function - Clojure - 测试函数表达式的相等性?

转载 作者:行者123 更新时间:2023-12-03 22:28:48 24 4
gpt4 key购买 nike

假设我有以下 clojure 函数:

(defn a [x] (* x x))

(def b (fn [x] (* x x)))

(def c (eval (read-string "(defn d [x] (* x x))")))

有没有办法测试函数表达式的相等性 - 一些等价于
(eqls a b)

返回真?

最佳答案

这完全取决于您所说的“函数表达式的相等性”是什么意思。

这些函数最终会成为字节码,所以我可以例如将与每个函数对应的字节码转储到 byte[],然后比较两个字节码数组。

但是,有许多不同的方法可以编写语义等效的方法,它们在字节码中不会具有相同的表示形式。

一般来说,不运行一段代码就不可能知道它做了什么。因此,在所有可能的输入上,如果不运行这两个位代码,就不可能判断这两个位代码是否等效。

从计算上讲,这至少与停机问题一样糟糕,甚至可能更糟。

停机问题实际上是不可判定的,因此这里的一般情况答案绝对是否定的(不仅对于 Clojure,而且对于每种编程语言)。

关于function - Clojure - 测试函数表达式的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9393713/

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