模式匹配有一个问题。当我向(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)
我怎样才能克服这一点?提前致谢
答案 0 :(得分:3)
takeNearestOnes agent [x] nearestOnes
应该是什么结果? takeNearestOnes agent [] nearestOnes
的结果应该是什么?
为这些案例编写额外的等式。
答案 1 :(得分:3)
由于你的函数是递归的并且减少了列表,你最终可能会工作到1个元素的列表,在这种情况下你的匹配将失败。你可以通过添加你的函数的另一个案例来解决这个问题,但是你觉得这个案例是合适的
像
这样的东西takeNearestOnes agent [x] nearestOnes = doSomething
takeNearestOnes agent [] nearestOnes = doSomethingElse