2013-04-01 3 views
0

J'ai un problème avec la correspondance de modèle. Lorsque je donne une entrée à (x: y: ys) la liste contenant 3 éléments, les câlins se plaignent qu'il y a: échec de correspondance de modèle. Je suppose que le problème est iciÉchec de correspondance de modèle dans la liste dans Haskell

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

parce qu'il ne correspond pas à trois éléments avec la liste contenant deux éléments

Ce code complet est:

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) 

Comment puis-je surmonter cela? Merci d'avance

Répondre

3

Étant donné que votre fonction est récursive et que vous réduisez la liste, vous pouvez éventuellement aller travailler jusqu'à une liste de 1 élément, auquel cas votre correspondance échouera. Vous pouvez résoudre ce problème en ajoutant un autre cas de votre fonction qui bon vous traite jugent approprié

Quelque chose comme

takeNearestOnes agent [x] nearestOnes = doSomething 
takeNearestOnes agent [] nearestOnes = doSomethingElse 
+0

Je vois ce que je dois faire. Merci! – nurgasemetey

3

Quel devrait être le résultat de takeNearestOnes agent [x] nearestOnes? Quel devrait être le résultat de takeNearestOnes agent [] nearestOnes?

Écrire des équations supplémentaires pour ces cas.

+0

ouais, vous êtes certainement raison! – nurgasemetey

Questions connexes