2013-10-25 114 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語句本身內,而是使用外部方法以及遞歸。