-3

我很难理解有关函数组合的国际象棋骑士问题。该练习是一个生成器/过滤器/选择器链,具有给定的包装函数(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 :: ???
???


我正在寻找有关如何处理此类问题的提示。

此致。

4

1 回答 1

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 种可能的移动,然后从这些位置中的每一个递归生成更多移动。

希望这将帮助您完成任务:)

于 2016-04-12T22:03:04.463 回答