Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Common lisp lisp嵌套if语句_Common Lisp_Nested If - Fatal编程技术网

Common lisp lisp嵌套if语句

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

嗨,我正在使用Common lisp制作一个歌曲数据库,我试图检查歌曲信息是否格式良好-即歌曲信息列表中有6个元素,但我也想检查列表中每个元素的类型。我试图使用if语句来实现这一点,首先检查是否有6个元素,然后检查每个元素的类型

   (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

正确格式化和缩进代码是您应该学习的第一件事。这样可以更容易地发现错误。您的代码缺少括号和语法问题。解决这些问题,看看你是否还有问题。正确格式化和缩进代码是你应该学习的第一件事。这样可以更容易地发现错误。您的代码缺少括号和语法问题。解决这些问题,看看你是否还有问题。