gpt4 book ai didi

function - 我有一个包含 3 个函数的 Clojure seq。为什么 (rest my-seq) 给出 "cannot be cast as"异常?

转载 作者:行者123 更新时间:2023-12-02 06:16:17 25 4
gpt4 key购买 nike

在调试较大函数的过程中,我创建了一个更简单的函数来测试错误所在:

(defn foo [a-val p1 p2 & rest]
(loop [curr-preds (cons p1 (cons p2 rest))]
(let [first-pred (first curr-preds)
first-bool (first-pred a-val)
second-bool ((second curr-preds) a-val)
third-bool ((last curr-preds) a-val)]
(println "\n\nLogical values: " first-bool second-bool third-bool)
(println "Is it a seq?" (seq? curr-preds))
(if (empty? curr-preds)
first-bool
#_(recur (rest curr-preds))
))))

p1、p2 和剩余函数的集合都是谓词(例如,奇数?)。我写这篇文章的目的是希望它总是能用 3 个谓词来调用。

当我取出倒数第二行的 #_ 时,出现以下错误:

java.lang.ClassCastException: clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn
/Users/gr/temp/LTtemp1.clj:166 user/foo
RestFn.java:467 clojure.lang.RestFn.invoke

通过println语句,我发现:

  • curr-preds 是一个包含 3 个谓词的 seq,正如预期的那样

  • 调用 a-val 上的每个 pred 都会返回预期结果

  • curr-preds 实际上是一个 seq

我的问题:rest 被定义为在 seq 上工作,那么为什么我会收到上述无法转换的错误?谢谢。

最佳答案

您有一个名为 rest 的局部变量,由函数参数列表绑定(bind)。您正在尝试调用 那个 rest,就好像它是一个函数一样,而不是调用 clojure.core/rest

关于function - 我有一个包含 3 个函数的 Clojure seq。为什么 (rest my-seq) 给出 "cannot be cast as"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870027/

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