在我的计算语言理论课上,我们得到了一个家庭作业,用一种语言实现一段代码,该语言只有用于流控制的 while 语句(没有 if 语句)。这主要是为了证明你可以编写一个图灵完备的语言,只需要一个while循环。
对于那些能够理解语言语法的人,这里是语言规则:
S -> S;S | while C do S od | id := E
E -> E + T | T | E - T
T -> T * F | F | F / T
F -> id | cons | (E)
C -> E = E | E > E | E < E | E >= E | E <= E | E != E | C and C | C or C | not(C)
这是从我的课堂笔记中复制的,所以如果有什么遗漏或不正确,请不要怪我!
要实现的代码是这样的:
if d = 0 do
x := 1
else
x := a / d
无论如何,如果您想继续使用上面的语言规则编写它,请继续。否则,请继续使用您最熟悉的任何语言编写它。但有一些警告!
- 没有 if 语句或除 while 循环之外的任何其他类型的流控制。
- 不作弊:上面的语法不包括任何 break 语句、return 语句或异常。不要使用它们。
我已经为此编写了一段代码(我将发布它只是为了证明这不是向我展示 codez 帖子)。我有点好奇其他人能想出什么。