lambda 演算中的变量范围 / haskell
Scope of variables in lambda calculus / haskell
给定一个表达式 s := (λx, y, z.x y z) λx, y.x λy, z.z, 是绑定变量的范围
s := (λx, y, z.x y z) (λx, y.x) (λy, z.z)
或
s := (λx, y, z.x y z) (λx, y.x (λy, z.z))
我猜这是第二个选项。
这个问题基本上是无解的。使用任何一个提议的抽象语法树来定义一个具体的语法都很容易,而且我真的不认为有一种或那种你想要在没有看到语法定义中的明确文本的情况下假设的强大约定您正在阅读的文档。
由于这是明确标记的Haskell:在这种特定情况下,这只是一个解析错误,您需要添加括号以消除歧义。但是,如果没有第一个 \x y z -> x y z
函数,默认将解析为 \x y -> (x (\y z -> z))
,您需要添加括号才能获得 (\x y -> x) (\y z -> z)
的另一个选项。 (\y z -> z
两边的括号不是可选的。)
给定一个表达式 s := (λx, y, z.x y z) λx, y.x λy, z.z, 是绑定变量的范围
s := (λx, y, z.x y z) (λx, y.x) (λy, z.z)
或
s := (λx, y, z.x y z) (λx, y.x (λy, z.z))
我猜这是第二个选项。
这个问题基本上是无解的。使用任何一个提议的抽象语法树来定义一个具体的语法都很容易,而且我真的不认为有一种或那种你想要在没有看到语法定义中的明确文本的情况下假设的强大约定您正在阅读的文档。
由于这是明确标记的Haskell:在这种特定情况下,这只是一个解析错误,您需要添加括号以消除歧义。但是,如果没有第一个 \x y z -> x y z
函数,默认将解析为 \x y -> (x (\y z -> z))
,您需要添加括号才能获得 (\x y -> x) (\y z -> z)
的另一个选项。 (\y z -> z
两边的括号不是可选的。)