Haskell 跟踪可以给出';倒置';折叠式加工
当我编译“modified sum”(«_sum_folds.hs»)文件时: 。。。将其应用于“[1..5]”,我得到:Haskell 跟踪可以给出';倒置';折叠式加工,haskell,Haskell,当我编译“modified sum”(«_sum_folds.hs»)文件时: 。。。将其应用于“[1..5]”,我得到: *Main > _sum ([1..5]) * 1 - 0 * 2 - 1 * 3 - 3 * 4 - 6 * 5 - 10 * 15 * it :: Integer (订购“foldl”流程可以…) 如果我移除, 我得到: (我们只有) …:(x)内部元素的处理顺序似乎已颠倒(它是一个“foldl”) 什么意思?表达式foldl(+)0[1..3]创建以下表达式
*Main > _sum ([1..5])
* 1 - 0
* 2 - 1
* 3 - 3
* 4 - 6
* 5 - 10
* 15
* it :: Integer
(订购“foldl”流程可以…)
如果我移除<++“-“++显示acc>,
我得到:
(我们只有什么意思?表达式
foldl(+)0[1..3]
创建以下表达式树:
+
/ \
+ 3
/ \
+ 2
/ \
0 1
在您的情况下,\u sum
和\u sum2
都可以这样构建一个树:
tr
/ \
tr 3
/ \
tr 2
/ \
0 1
这里tr
是褶皱中进行累积的功能
和追踪
_sum2
要访问的第一个操作是树顶部的tr\u3
。
在tr
功能中,3是x
,uuuuu是acc
在\u sum2
中发生这种情况时,将打印3
然后计算acc
,因此计算tr\uuuuuu2
,结果显示2
然后计算tr\uuuu1
,因此打印1
_总数
然而,在\u sum中,一个不同的事件过程展开了(没有双关语)
我们再次从树的顶部开始:tr\u3
步骤1)
由于在\u sum
中也打印出了acc
,Haskell需要
评估它,即tr\uuuuu2
。
完成此评估后,它将打印出acc
,然后打印3
步骤2)
要计算tr\uuuuu2
,因为您正在打印acc
,Haskell需要计算它,即2-即tr\uuuuuu1
左侧的树。
完成此评估后,它将打印出acc
,然后打印2
步骤3)
要计算tr\uuuuuu1
,由于您正在打印acc
,Haskell需要计算1左侧的树,即0。
完成此评估后,它将打印出acc
,然后打印1。
在本例中,0已被计算,因此它打印出0,然后打印出1
然后控制返回到步骤2,显示acc
(1),然后显示2
然后控制返回到步骤1,并显示acc
(3)和3。中的图表可能会有所帮助。
+
/ \
+ 3
/ \
+ 2
/ \
0 1
tr
/ \
tr 3
/ \
tr 2
/ \
0 1