Clojure编译器错误
我正在开发一个clojure程序,其中包括以下代码行:Clojure编译器错误,clojure,compiler-errors,Clojure,Compiler Errors,我正在开发一个clojure程序,其中包括以下代码行: (defn makeStruct "Take a line of input and return a starbucks-struct" [input] (let[(apply struct storeinfo (clojure.string/split input #","))] ) ) 我收到这个编译器错误: Exception in thread "main" java.lang.IllegalArgumentExcep
(defn makeStruct
"Take a line of input and return a starbucks-struct"
[input]
(let[(apply struct storeinfo (clojure.string/split input #","))]
)
)
我收到这个编译器错误:
Exception in thread "main" java.lang.IllegalArgumentException: let requires an even number of forms in binding vector (clojureHW.clj:24)
我对clojure非常陌生,不完全确定我在做什么,但在本例中,输入是一个字符串,我将它拆分成一个向量来初始化我的结构。我是否错误地使用了let的语法?let需要偶数形式,因为它将值绑定到局部变量:
(let [x 10,
y (+ x 20)]
; do something with x and y here
(* x y))
请阅读此处的文档:
let需要偶数个表单,因为它将值绑定到局部变量:
(let [x 10,
y (+ x 20)]
; do something with x and y here
(* x y))
请阅读此处的文档:
我认为您对lisp处理返回值和绑定的方式仍然存在误解 表达式中一对参数中的所有内容都返回一个值,该值可由另一个表达式中的参数使用或绑定到符号 你有这个
(apply struct storeinfo (clojure.string/split input #","))
这将返回值,因为只有一个表达式。这很简单,只要数一数她的父母就可以了
由于在let中没有其他内容,因此在let中有奇数个表单(表达式)。我认为您对处理返回值和绑定的lisp方式仍有误解 表达式中一对参数中的所有内容都返回一个值,该值可由另一个表达式中的参数使用或绑定到符号 你有这个
(apply struct storeinfo (clojure.string/split input #","))
这将返回值,因为只有一个表达式。这很简单,只要数一数她的父母就可以了
由于let中没有其他内容,因此let中的形式(表达式)为奇数。let表达式的“绑定”端可能只有符号和解构形式,例如向量和映射。
let
的绑定端无法计算像(应用结构存储信息)
这样的表达式let
表达式的“绑定”端只能有符号和分解形式,例如向量和映射。let
的绑定端无法计算像(apply struct storeinfo)
这样的表达式。是的,我了解这一点,并且已经浏览了该文档页面。我在let语句中计算了两个部分(apply struct storeinfo)和(split input#“,”),它有什么问题?(apply struct storeinfo)不是符号,就像我给你的示例中的x或y一样。顺便说一句,您有(apply struct storeinfo(clojure.string/split input#“,”),没有(apply struct storeinfo)和(split input#“,”)。按照我的理解,(apply struct storeinfo)将返回一个storeinfo结构,然后该结构将被以下语句拆分,(split input#“,”)是否允许在此处使用错误的关键字/操作?是的。也许您的意思是->或->>,例如,请参见。但是,如果(apply struct storeinfo)是将要执行的第一个表单,那么我希望storeinfo是您之前定义的东西,或者是makeStruct.Hey的一个参数。如果你还在看这篇文章,我还发布了另一个关于clojure编译器错误的问题。如果你不能回答,没有压力。谢谢你的帮助。是的,我理解这一点,并且已经阅读了文档页面。我在let语句中计算了两个部分(apply struct storeinfo)和(split input#“,”),它有什么问题?(apply struct storeinfo)不是符号,就像我给你的示例中的x或y一样。顺便说一句,您有(apply struct storeinfo(clojure.string/split input#“,”),没有(apply struct storeinfo)和(split input#“,”)。按照我的理解,(apply struct storeinfo)将返回一个storeinfo结构,然后该结构将被以下语句拆分,(split input#“,”)是否允许在此处使用错误的关键字/操作?是的。也许您的意思是->或->>,例如,请参见。但是,如果(apply struct storeinfo)是将要执行的第一个表单,那么我希望storeinfo是您之前定义的东西,或者是makeStruct.Hey的一个参数。如果你还在看这篇文章,我还发布了另一个关于clojure编译器错误的问题。如果你不能回答,没有压力。谢谢你的帮助。