Lambda微积分 - 插入括号?

时间:2015-12-12 18:16:39

标签: parsing lambda lambda-calculus

这是我期中考试的一个问题,我不明白该怎么做。

插入括号以阐明它是如何解析的

xyλx.xy

答案是:((x y)(λx。(x y))))

有人可以解释你是怎么做到的吗?

1 个答案:

答案 0 :(得分:0)

嗯,首先,这不是答案。 ((x y) (λx.(x y))))无效,它有一个额外的右括号。

(x y)(λx。(x y))))注意不平衡的括号

但是,我将忽略这一点,假设你的意思是:((x y) (λx.(x y))),删除了最后的括号。我不是故意在那里挑选,我相信这可能只是一个错字,我的IDE总是在我的代码下面添加红线来添加或忽略错误地添加一个括号,但我确实认为这应该被指出。

如果问题是以这种形式提供给你的,没有任何其他信息,我会说它可能不是很好,如果我在决赛中看到它会对我产生很大的困扰,因为它有一些含糊之处它。这可以用我能看到的几种有效方式解决,但你提供的答案的更正版本可以说是最干净的。

回顾x y λx.x y

一些语法上有效但包含变量的非等效方法可能是:

  • ((x y) (λx.(x y)))
  • (x y)(λx.x)y - 相当于(x y)y
  • x (y ((λx.x) y) ) - 相当于x (y y)
  • x (y (λx.(x y)))

在接近问题时,请注意λx.___是唯一完成的抽象。因此,你知道在λ的左边会有一个左括号,我们有:_x_ _y_(λx._x_ _y_,一些明显的直觉,基于这样一个事实,即最终的解决方案必须确实是关闭的,并且平衡会提供:{{ 1}}其中(x_ _y_ (λx.(x_ _y)_*指定一个或多个括号的可能性,无论是打开还是关闭,请参阅_,它只能是一个右括号。除此之外,只要括号保持平衡,其余的空白就可以以任何方式填充。

我的猜测是:

  • 这里遗漏了一些问题,比如你可能知道或者可以确定一些示例输入和输出,或被告知要做出最清晰的结果(非常主观)

  • 这是一个多项选择题,可以排除其他选项。也许他们没有有效地放置括号,包括过度浪费的括号,如_*。也许他们显然无效,如((((x y) (λx.(x y)))))。或者,括号可能是不平衡的,如您原来的(x (y λx))(.x y)声明,或更夸张,不那么微妙的((x y) (λx.(x y))))

在我看来,这会产生一个体面的多项选择问题,或者有更多的信息,有点模糊和开放,但不是太可怕填补空白,提供更多信息。如果按原样给出,我确实遇到了问题,但也许你的教授会接受以合理方式格式化的所有有效答案。如果你提供的答案,包括额外的不平衡的右括号,实际上是他用作正确的答案(可能是多选),那么就有一个更大的问题,因为答案显然是错误的。

很抱歉回答这个问题很晚,希望这个问题对你有用,希望如果有的话,这会有所帮助。