lambda演算/ haskell中的变量范围

时间:2017-12-14 22:12:41

标签: haskell lambda functional-programming lambda-calculus

给出类似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))

我猜这是第二个选择。

1 个答案:

答案 0 :(得分:2)

这个问题基本上是无法回答的。使用提出的抽象语法树定义一个具体的语法会很容易,我真的不认为这样一个强大的约定,你想要假设一个没有看到明确的文本在您正在阅读的文档的语法定义中。

由于这是明确标记的Haskell:在这种特定情况下,它只是一个解析错误,并且您需要添加括号以消除歧义。但是,如果没有第一个\x y z -> x y z函数,默认情况下将解析为\x y -> (x (\y z -> z)),您需要添加括号以获取(\x y -> x) (\y z -> z)的另一个选项。 (\y z -> z周围的括号不是可选的。)