Я плохо разбираюсь в проблеме шахматного рыцаря, касающейся функции композиции. Упражнение представляет собой цепочку генератора/фильтра/селектора с заданной функцией обертки (knightProblem), которая склеивает все вместе.haskell Chess Knight Tour: Функциональная композиция
Неясно мне, как функция kGenerator как первая часть цепочки должны работать с несколькими параметрами:
-- 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 :: ???
???
Я ищу советы о том, как справиться с такого рода проблемами.
С уважением.
спасибо 9000. моего внимания на «неизменный» knightProblem = kSelector. kFilter. kGenerator цепное уравнение. Я только «решил» проблему, введя составные типы данных, так что каждая компонентная функция имеет только один аргумент, такой как kGenerator :: Job -> ..., но это другая проблема, а не заданная :) – SnDnFn
Если вам нужно, вы может передать аргумент «через» функцию без ее изменения. Например, 'kFilter' может принимать кортеж' (Position, [Moves]) 'и возвращать' (Position, [Moves]) ', просто передавая позицию в' kSelector', которая в ней нуждается. – 9000