使用分号语法理解评估和执行顺序

问题描述 投票:0回答:1

我已经从我的previous question学到了一点FFL分号。但是,仍然不清楚它们执行的评估或执行顺序。所以这是一个更具体的例子:

 [ expr_a, expr_b ; expr_c, expr_d ; expr_e, expr_f ]

上述代码的执行顺序应该是什么?在我的脑海中,它应该是:

  1. 评估a&b
  2. 执行a,执行b
  3. 评估c&d
  4. 执行c,执行d
  5. 评估e&f
  6. 执行e,执行f

现在让我们想象一下expr_b = add(test_list, ['b saw ' + str(test_list)])和所有其他表达式的相似之处。那么test_list的最终内容是什么?

在我的脑海中,它应该是:

锯[]

b见[]

c看到[锯[],b看[]]

d看到[锯[],b看[]]

e锯[锯[],b锯[],c锯[锯[],锯[]],锯[锯[],锯[]]]

f锯[锯[],锯锯[],锯锯[锯[],锯锯[]],锯[锯[],锯锯[]]]

请解释为什么不是这样。

syntax purely-functional anura ffl
1个回答
3
投票

首先,您可能不希望完全像这样编写代码。通常,分号的优先级非常低,但列表文字不是运算符,代码将如下所示:

[a, (b; c), (d; e), f]

这意味着您将并行启动四个命令管道(尽管其中两个只有一个成员)。它将评估abdf。然后它将执行a的结果,然后执行b的结果。执行b将触发命令管道中的下一步,因此它将评估并执行c。然后它将执行d,然后评估并执行e,最后它将执行f

所以:

a saw []
b saw []
c saw [a saw [], b saw []]
d saw []
e saw [a saw [], b saw [], c saw [a saw [], b saw []], d saw []]
f saw []
© www.soinside.com 2019 - 2024. All rights reserved.