我需要分析以下Haskell函数,它是更大程序的一部分(从here中提取):
findMoves :: Position -> [Position]
findMoves (left,right) = elems $ Data.Set.filter validPos moves where
moves | Farmer `member` left = Data.Set.map (move delItem addItem) left
| otherwise = Data.Set.map (move addItem delItem) right
move f1 f2 item = (f1 item left, f2 item right)
delItem item = delete Farmer . delete item
addItem item = insert Farmer . insert item
我在where
声明结束之前了解所有内容,但之前我还没有看到move f1 f2 item
声明之类的内容,我现在正在使用Haskell。那是什么?类似于内联函数声明的东西?我只需要知道那是什么声明,我不是要求你解释开发人员想要做什么(这是我的任务)。
由于
答案 0 :(得分:4)
或许看看一些更简单的例子,看看我们是否能弄清楚发生了什么
foo :: Int -> (Int, Int)
foo x = apply add sub x
where
apply f1 f2 someThing = (f1 x someThing, f2 x someThing)
add k = (+) (1) --<---------------^
sub s = (-) (10) -- <-----------------------------^
使用输入5,这将给出输出(6,5)。说“我想将x应用于某个函数”这样的函数通常很有用,其中此函数本身将其他函数作为输入。所以我们可以通过说:这是一个函数,它与另外两个函数一起给我提供了我想要的输出。
在上面的简短示例中,我们说,“这是一个函数,它与其他两个函数一起应用具有某些值的函数来构成一对”。我们并不关心这些功能是什么,在这种情况下我们使用了函数add
和sub
,但事实并非如此。