4

シンプルなボードゲーム用の Haskell ソルバーを書いています。私はこの機能を持っています:

bestMove :: Board -> (Int,Int)
bestMove brd = minimumBy (comparing $ length.choices brd) (remaining brd)

基本的に bestMove は、残りの手から最小限の選択肢を残す手です。ただし、どの要素も 1 つ以上の選択肢を残さないことはわかっています。そのような移動が見つかった場合に最小値の検索を終了するには、この関数をどのように記述すればよいですか?
言い換えれば、十分に小さい(リストの残りをトラバースせずに)最小または最初に遭遇した要素を返す関数が必要です。

これは私の最初の Haskell プログラムなので、おそらく非常に基本的なものです。これはバックトラッキング ソルバーであるため、何百万回も呼び出される関数でリスト全体をトラバースしないことが重要です。

4

1 に答える 1