0

我有一个模式匹配问题。当我向(x:y:ys) 输入包含 3 个元素的列表时,拥抱抱怨说有:模式匹配失败。我想问题就在这里

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

因为它无法将三个元素与包含两个元素的列表匹配

这是完整的代码:

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 回答