Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 哈斯克尔国际象棋骑士之旅:功能组合_Haskell_Chess_Function Composition_Dot Operator - Fatal编程技术网

Haskell 哈斯克尔国际象棋骑士之旅:功能组合

Haskell 哈斯克尔国际象棋骑士之旅:功能组合,haskell,chess,function-composition,dot-operator,Haskell,Chess,Function Composition,Dot Operator,我很难理解一个有关国际象棋骑士的问题 功能组合。这个练习是一个生成器/过滤器/选择器 链与给定的包装器函数(奈特问题)粘合在一起 我不清楚作为链中第一部分的函数kGenerator应如何处理多个参数: -- Chess Knight Problem: Generate all Knight moves of length NrMoves -- that end at the target position knightProblem :: StartPos -> NrMoves -> Targ

我很难理解一个有关国际象棋骑士的问题 功能组合。这个练习是一个生成器/过滤器/选择器 链与给定的包装器函数(奈特问题)粘合在一起

我不清楚作为链中第一部分的函数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 :: ???
???

我在寻找如何处理此类问题的提示


致以最诚挚的问候。

试着写下其他函数的类型签名

-- 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]
想想
[移动]
是什么;这可能类似于
[[Position]]
,一个表示移动链的位置列表列表

从给定位置生成移动的一个明显方法是执行8个可能的移动,然后从每个位置递归生成更多的移动


希望这能帮助你完成作业:)

谢谢。我的重点是“不变的”骑士问题=kSelector。kFilter。K生成链方程。我只是通过引入复合数据类型来“解决”这个问题,这样每个组件函数只有一个参数,比如kGenerator::Job->……,但这是一个不同的问题,而不是指定的问题:)如果需要,可以通过函数“传递”参数,而无需更改它。例如,
kFilter
可以接受一个元组
(Position,[Moves])
并返回
(Position,[Moves])
,只需将位置传递给需要它的
kSelector