Haskell foldl1它是如何工作的?

Haskell foldl1它是如何工作的?,haskell,Haskell,我有密码 g :: Int->Int->Int g x y = x*2 - y 如果我调用foldl1 g[4,3,2,1],它会返回15,但我不知道它是如何返回15的,有人能解释一下为什么会这样吗?foldl1首先将函数应用于列表的前两个元素,然后获取结果并将函数应用于它和第三个元素,然后获取结果并将函数应用于它和第四个元素,然后应用于结果和第五个元素,然后应用于第六个元素,依此类推,直到列表结束 因此: foldl1首先将函数应用于列表的前两个元素,然后获取结果并将函数应用于它

我有密码

g :: Int->Int->Int
g x y = x*2 - y

如果我调用foldl1 g[4,3,2,1],它会返回15,但我不知道它是如何返回15的,有人能解释一下为什么会这样吗?

foldl1
首先将函数应用于列表的前两个元素,然后获取结果并将函数应用于它和第三个元素,然后获取结果并将函数应用于它和第四个元素,然后应用于结果和第五个元素,然后应用于第六个元素,依此类推,直到列表结束

因此:


foldl1
首先将函数应用于列表的前两个元素,然后获取结果并将函数应用于它和第三个元素,然后获取结果并将函数应用于它和第四个元素,然后是结果和第五个元素,然后是第六个元素,依此类推,直到列表结束

因此:


元问题:你是这本书的作者吗?如果是这样的话,我建议你重新发布它的
foldPairs
部分——关于它有一些非常有趣的观点,我正要完成一个关于它们的回答……当你删除的时候,我也正在编辑你问题的答案。元问题:你是这本书的作者吗?如果是这样的话,我建议你重新发布它的
foldPairs
部分——关于它有一些相当有趣的观点,我正要完成一个关于它们的回答……当你删除时,我也正在编辑你问题的答案。一个有用的标识(我想)是
foldl1f(x:xs)==foldlfxxs
foldlf[]
未定义)。@chepner虽然这对一个有经验的程序员(或数学家)来说是一个有用的身份,但我认为,通过他们的问题来判断他们的技能/知识水平,这对OP几乎没有帮助。我不确定这个问题是关于折叠方面,还是具体来说是关于折叠方面。一个有用的身份(我认为)是
foldl f(x:xs)==foldl f x xs
foldl f[]
未定义)。@chepner虽然这对一个有经验的程序员(或数学家)是一个有用的身份,但我认为这对OP几乎没有帮助,通过他们的问题来判断他们的技能/知识水平。我不确定这个问题是否与折叠方面有关,或者具体地说是
foldl1
Step 1:  g 4 3 = 4*2 - 3 = 5
Step 2:  g 5 2 = 5*2 - 2 = 8
Step 3:  g 8 1 = 8*2 - 1 = 15