J'ai de la difficulté à comprendre un problème de chevalier d'échecs concernant la composition de la fonction . L'exercice est une chaîne de générateur/filtre/sélecteur avec une fonction d'enveloppe donnée (knightProblem) qui colle tout ensemble.haskell Chess Knight Tour: composition de la fonction
Il me est difficile de savoir sur la façon dont la fonction kGenerator comme la première pièce de la chaîne doit gérer plusieurs paramètres:
-- Chess Knight Problem: Generate all Knight moves of length NrMoves
-- that end at the target position
knightProblem :: StartPos -> NrMoves -> TargetPos -> [Moves]
knightProblem = kSelector . kFilter . kGenerator
-- kGenerator: needs StartPos, NrMoves, generates all sequences of length NrMoves
-- kFilter: remove all moves which contain invalid positions
-- kSelector: keep all moves which terminate at TargetPos
kGenerator :: ???
???
Je cherche des conseils sur la façon de gérer ce genre de problèmes.
Cordialement.
grâce 9000. Je mets l'accent sur la « immuable » knightProblem = kSelector. kFilter. kÉquation de la chaîne du générateur. J'ai seulement "résolu" le problème en introduisant des types de données composés de sorte que chaque fonction de composant ait un seul argument, comme kGenerator :: Job -> ..., mais c'est un problème différent et pas celui spécifié :) – SnDnFn
Si vous avez besoin peut passer un argument "à travers" une fonction sans le changer. Par exemple, 'kFilter' peut accepter un tuple' (Position, [Moves]) 'et retourner' (Position, [Moves]) ', en passant simplement la position à' kSelector' qui en a besoin. – 9000