Ich habe Schwierigkeiten, ein Problem mit Chess Knight bezüglich Funktionszusammensetzung zu verstehen. Die Übung ist ein Generator/Filter/Selektor Kette mit einer gegebenen Wrapper-Funktion (KnightProblem), die alles zusammenklebt.haskell Chess Knight Tour: Funktionszusammensetzung
Es ist mir unklar, wie die Funktion kGenerator als das erste Stück in der Kette mehr Parameter behandeln soll:
-- 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 :: ???
???
Ich suche Hinweise, wie diese Art von Problemen zu behandeln.
Mit freundlichen Grüßen.
dank 9000. mein Fokus auf der „unveränderlich“ ist knightProblem = kSelector. kFilter. kGenerator-Kettengleichung. Ich habe das Problem nur "gelöst", indem ich zusammengesetzte Datatypen eingeführt habe, so dass jede Komponentenfunktion nur ein Argument hat, wie kGenerator :: Job -> ..., aber das ist ein anderes Problem und nicht das angegebene :) – SnDnFn
Wenn Sie brauchen kann ein Argument "durch" eine Funktion übergeben, ohne es zu ändern. Zum Beispiel kann 'kFilter' ein Tupel' (Position, [Moves]) 'akzeptieren und' (Position, [Moves]) 'zurückgeben, wobei die Position einfach an' kSelector' übergeben wird. – 9000