Scheme でバックトラッキング検索を実装しようとしています。これまでのところ、私は次のものを持っています:
(define (backtrack n graph assignment)  
    (cond (assignment-complete n assignment) (assignment) )
    (define u (select-u graph assignment))
    (define c 1)
    (define result 0)
    (let forLoop ()
        (when (valid-choice graph assignment c)
             (hash-set! assignment u c)
             (set! result (backtrack n graph assignment))
             (cond ((not (eq? result #f)) result))
             (hash-remove! assignment u)            
        )
        (set! c (+ c 1))
        (when (>= n c) (forLoop))
    )
   #f ; I believe this is where I'm having problems
)
私の関数の割り当て完了と選択-u は単体テストに合格します。引数代入は(make-hash)でハッシュテーブルmakeなので問題ないはずです。
私が抱えている問題は、再帰が false 以外の値を返さない場合 (有効な割り当てである必要があります)、ループの最後に false を返すことに関連していると思います。明示的な return ステートメントに相当するスキームはありますか?