我有一个功能,在我正在制作的国际象棋游戏中找到空单元格,我想将我的一个部分替换为我找到的那个空白点。我有一个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 ==...
那么我只返回一个布尔类型,这不是我想要的。有更简单的方法吗?
答案 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]
你在寻找什么?