java.lang.Long不能强制转换为clojure.lang.IFn I don';I don’我不明白为什么我会收到这个

java.lang.Long不能强制转换为clojure.lang.IFn I don';I don’我不明白为什么我会收到这个,clojure,Clojure,我写了这段代码并收到了这个错误,但我不明白为什么?请向我解释。reduce的参数顺序不正确。 请参见reduce的参数顺序不正确。 请参见您的参数顺序错误。您需要(减少f val coll)。因此,0显然不是一个函数。交换一下。哦,真的,不要看这个。。。但现在我有一个新问题,为什么每次我都接受0。因为你的归约函数是对字符进行操作的,而你传递给countL一个字符串。所以charq!=“q”。只需调用(countL text1\q)它实际上可以简单得多:(count(filter#(=%\q)te

我写了这段代码并收到了这个错误,但我不明白为什么?请向我解释。

reduce的参数顺序不正确。
请参见

reduce的参数顺序不正确。
请参见

您的参数顺序错误。您需要
(减少f val coll)
。因此,
0
显然不是一个函数。交换一下。哦,真的,不要看这个。。。但现在我有一个新问题,为什么每次我都接受0。因为你的归约函数是对字符进行操作的,而你传递给
countL
一个字符串。所以
charq
!=“q”。只需调用
(countL text1\q)
它实际上可以简单得多:
(count(filter#(=%\q)text1))
甚至
(count(filter#{\q}text1))
@NickitaDavidenko您需要解释其中的哪一部分?集合可以被视为函数,在这种情况下,如果它们的参数是集合的一部分,则返回true;如果它们不是集合的一部分,则返回false。Filter将其用作谓词来过滤掉所有非-q,然后计算结果。您的参数顺序错误。您需要
(减少f val coll)
。因此,
0
显然不是一个函数。交换一下。哦,真的,不要看这个。。。但现在我有一个新问题,为什么每次我都接受0。因为你的归约函数是对字符进行操作的,而你传递给
countL
一个字符串。所以
charq
!=“q”。只需调用
(countL text1\q)
它实际上可以简单得多:
(count(filter#(=%\q)text1))
甚至
(count(filter#{\q}text1))
@NickitaDavidenko您需要解释其中的哪一部分?集合可以被视为函数,在这种情况下,如果它们的参数是集合的一部分,则返回true;如果它们不是集合的一部分,则返回false。Filter使用它作为一个谓词来过滤掉所有的非-q,然后计算结果。
(def text1 "qwwqer qwasdfas")
(defn countL [text char] (reduce 0
                                 #(if (= %2 char) (+ %1 1) (+ %1 0))
                                 text)
)
(println (countL text1 "q"))