0

パターン マッチングに 1 つの問題があります。(x:y:ys) に 3 つの要素を含むリストに入力を与えると、ハグは「パターン マッチの失敗」があると文句を言います。問題はここにあると思います

takeNearestOnes agent (y:ys) (x:nearestOnes)

2 つの要素を含むリストと 3 つの要素の一致に失敗するため

これは完全なコードです:

takeNearestOnes agent (x:y:ys) nearestOnes
            | first == second =  takeNearestOnes agent (y:ys) (x:nearestOnes)
            | otherwise = (x:nearestOnes)
        where first=(manhattanDistance x (agentCoord agent))
              second=(manhattanDistance y (agentCoord agent)

どうすればこれを克服できますか?前もって感謝します

4

2 に答える 2

3

の結果はどうなりtakeNearestOnes agent [x] nearestOnesますか? の結果はどうなりtakeNearestOnes agent [] nearestOnesますか?

これらの場合の追加の方程式を書きます。

于 2013-04-01T09:26:25.857 に答える
3

関数は再帰的でリストを減らしているため、最終的には 1 つの要素のリストまで下がってしまう可能性があります。その場合、一致は失敗します。これを処理する関数の別のケースを追加することでこれを修正できますが、適切だと感じます

何かのようなもの

takeNearestOnes agent [x] nearestOnes = doSomething
takeNearestOnes agent []  nearestOnes = doSomethingElse
于 2013-04-01T09:27:11.390 に答える