我正在为计算语言理论课做作业,需要在一种只有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
无论如何,如果你想按照上述语言规则编写,可以继续;否则,请使用你最熟悉的语言编写。但是有几个注意点!
- 除while循环外,不得使用if语句或任何其他控制流程的语句。
- 不能作弊:上述语法不包括任何break语句、return语句或异常。请勿使用它们。
我已经为此编写了我的一部分代码(为了证明这不是一个“show me teh codez”贴子,我会把它发布出来)。但我很好奇其他人能想出什么来。