Common lisp lisp嵌套if语句
嗨,我正在使用Common lisp制作一个歌曲数据库,我试图检查歌曲信息是否格式良好-即歌曲信息列表中有6个元素,但我也想检查列表中每个元素的类型。我试图使用if语句来实现这一点,首先检查是否有6个元素,然后检查每个元素的类型Common lisp lisp嵌套if语句,common-lisp,nested-if,Common Lisp,Nested If,嗨,我正在使用Common lisp制作一个歌曲数据库,我试图检查歌曲信息是否格式良好-即歌曲信息列表中有6个元素,但我也想检查列表中每个元素的类型。我试图使用if语句来实现这一点,首先检查是否有6个元素,然后检查每个元素的类型 (defun checkSongInfo (par1 par2) (if (= 6 (length (nth par1 par2)) (if (intergerp (first (nth par1 par2)))) 'complete
(defun checkSongInfo (par1 par2)
(if (= 6 (length (nth par1 par2))
(if (intergerp (first (nth par1 par2)))) 'complete 'incomplete))
所以基本上我有这段代码要开始,老实说,我刚刚开始使用LISP,对它并不熟悉。基本上我在这里要做的是检查6个元素,如果成功,if语句的成功结果应该是检查列表的第一个元素,歌曲和列表作为参数传入,我的代码的这些部分应该可以工作,因为我已经尝试将它们直接输入到终端中,它们做了它们应该做的事情。问题在于if语句,目前它告诉我参数太少。当我这样做时,第一个if语句起作用
if(=6 (length (nth par1 par2))) 'complete 'incomplete
但是,当我放入另一个if语句时,它为if语句运算符错误消息提供了you have to now参数。这可能是由于我对LISP的误解,我已经寻找了很久,无法找到解决办法 如果
if
,则else
表单是可选的。在风格上,如果没有else
表达式,则在时使用
(defun checkSongInfo (par1 par2)
(when (= 6 (length (nth par1 par2))) ; You're missing a ) here.
(if (intergerp (first (nth par1 par2)))
'complete
'incomplete))) ; Also missed a ) here.
else
表单是可选的,如果if
。在风格上,如果没有else
表达式,则在时使用
(defun checkSongInfo (par1 par2)
(when (= 6 (length (nth par1 par2))) ; You're missing a ) here.
(if (intergerp (first (nth par1 par2)))
'complete
'incomplete))) ; Also missed a ) here.
括号有问题,代码中可能拼写错误了integraerp
。我想你想这样做:
(defun checkSongInfo (par1 par2)
(if (= 6 (length (nth par1 par2))) ; added a ) here
(if (integerp (first (nth par1 par2))) ; removed a ) here, intergerp => integerp
'complete
'incomplete))) ; added a ) here
如果是6个元素并且第二次测试失败,那么您将得到不完整的,但是如果不是6个元素,则得到NIL
。如果某项测试需要通过多个测试才能成为T
,则可以使用和和或而不是嵌套ifs。我会在这里使用和
,如下所示:
(defun checkSongInfo (par1 par2)
(if (and (= 6 (length (nth par1 par2)))
(integerp (first (nth par1 par2))))
'complete
'incomplete))
如果两个测试都通过,则返回complete
,否则返回complete
括号有问题,代码中可能拼写错误了integraerp
。我想你想这样做:
(defun checkSongInfo (par1 par2)
(if (= 6 (length (nth par1 par2))) ; added a ) here
(if (integerp (first (nth par1 par2))) ; removed a ) here, intergerp => integerp
'complete
'incomplete))) ; added a ) here
如果是6个元素并且第二次测试失败,那么您将得到不完整的,但是如果不是6个元素,则得到NIL
。如果某项测试需要通过多个测试才能成为T
,则可以使用和和或而不是嵌套ifs。我会在这里使用和
,如下所示:
(defun checkSongInfo (par1 par2)
(if (and (= 6 (length (nth par1 par2)))
(integerp (first (nth par1 par2))))
'complete
'incomplete))
如果两个测试都通过,则返回complete
,否则返回complete
正确格式化和缩进代码是您应该学习的第一件事。这样可以更容易地发现错误。您的代码缺少括号和语法问题。解决这些问题,看看你是否还有问题。正确格式化和缩进代码是你应该学习的第一件事。这样可以更容易地发现错误。您的代码缺少括号和语法问题。解决这些问题,看看你是否还有问题。