-1

そのため、現在 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)))))

つまり、基本的に 2 つのネストされたループがあります。if ステートメントが true の場合、この関数を再帰的に実行しようとしていますが、ステートメントが true でない場合は、ループを実行し続ける必要があります。代わりに、if ステートメントが評価され、nil が返されます。これを続けるために使用できる何らかの継続機能はありますか? ありがとう!

4

1 に答える 1

0

問題がループ自体にあることに気付きました。return の 2 番目の句がない場合、CLISP で if ステートメントがスキップされます。そのため、問題は if ステートメント自体ではなく、外部メソッドと再帰にありました。

于 2013-10-26T23:42:38.213 に答える