haskell国际象棋骑士之旅:功能组合

时间:2016-04-12 21:01:27

标签: haskell chess function-composition dot-operator

我很难理解国际象棋骑士的问题 功能组成。练习是发电机/过滤器/选择器 带有给定包装函数(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 :: ???
???


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

最好的问候。

1 个答案:

答案 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]

所以看来kGeneratorkFilter提供[Moves]

kGenerator :: Position -> [Moves]

想想[Moves]是什么;这可能类似于[[Position]],一个代表行动链的位置列表列表。

从给定位置生成移动的一种显而易见的方法是执行8次可能的移动,然后递归地从这些位置生成更多移动。

希望这可以帮助您完成作业:)