我很难理解国际象棋骑士的问题 功能组成。练习是发电机/过滤器/选择器 带有给定包装函数(knightProblem)的链,它将所有东西粘在一起。
我不清楚作为链中第一部分的函数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 :: ???
???
我正在寻找有关如何处理此类问题的提示。
最好的问候。
答案 0 :(得分:1)
尝试为其他功能写下类型签名。
-- kSelector: keep all moves which terminate at TargetPos
-- something like
kSelector :: Position -> [Moves] -> [Moves]
-- kFilter: remove all moves which contain invalid positions
-- something like
kFilter :: [Moves] -> [Moves]
所以看来kGenerator
应kFilter
提供[Moves]
:
kGenerator :: Position -> [Moves]
想想[Moves]
是什么;这可能类似于[[Position]]
,一个代表行动链的位置列表列表。
从给定位置生成移动的一种显而易见的方法是执行8次可能的移动,然后递归地从这些位置生成更多移动。
希望这可以帮助您完成作业:)