如何在Haskell中编写等于函数的输出值?

时间:2016-02-12 01:40:22

标签: haskell

我有一个功能,在我正在制作的国际象棋游戏中找到空单元格,我想将我的一个部分替换为我找到的那个空白点。我有一个findCells函数,所以我有一个像这样的代码

movePawnBack :: GameState -> Player -> [[Cell]]
movePawnBack g p = if p == Black then BP = findCells g E else WP = findCells g E


findCells :: GameState -> Cell -> [(Int, Int)]
findCells b c = [(x, y) | x <- [0..4], y <-[0..4], getFromBoard (theBoard b) (x, y) == c]

然而,它给了我一个错误,我没有else原因,如果我做这样的事情BP ==...那么我只返回一个布尔类型,这不是我想要的。有更简单的方法吗?

1 个答案:

答案 0 :(得分:1)

这是你想要做的吗?

movePawnBack :: GameState -> Player -> (Cell -> [(Int, Int)])
movePawnBack g p = if p == Black then (findCells g) else (findCells g)

为了返回一个函数,除了currying,如上所述,你也可以使用lambda

movePawnBack :: GameState -> Player -> (Cell -> [(Int, Int)])
movePawnBack g p = if p == Black then (\bp -> findCells g bp) else (\wp -> findCells g wp)

还要注意返回类型(Cell -> [(Int, Int)]),只要它在括号中,它通常表示一个函数,虽然在上面的情况下不需要,但我把它放在那里因为你的问题标题:output value in Haskell that equals a function? 。例如,map有一个函数:

>>> :t map
map :: (a -> b) -> [a] -> [b]

你在寻找什么?