2013-10-25 82 views
-1

所以我现在试图在CLISP中编写一个函数。我想要做的是让程序停下来,并在某些情况下做某些事情,但在条件不成立的情况下继续循环。所以如果语句在CLISP中返回

(do ((i 0 (1+ i))) 
     ((equal rows i)) 
    ;;loop body 
    ;;for each row, look at a column 
    (do ((j 0 (1+ j))) 
    ((equal cols j)) 
     ;;loop body 
     (if 
     (equal (get-value board i j) 0) (do ((lst (poss(get-row board i)) (cdr lst))) 
             ((null lst) nil) 
             (return-from solve-driver(set-value board i j (car lst))))) 

所以基本上我有两个嵌套循环。在if语句为true的情况下,我递归地试图运行这个函数,但是如果语句不是真的,它需要继续运行循环。相反,if语句评估并返回nil。是否有某种继续功能可以用来保持这种状态?谢谢!

回答

0

认识到问题出现在循环内部。如果语句在CLISP中被跳过,如果没有返回的第二个子句。所以这个问题不在if语句本身内,而是使用外部方法以及递归。