对于我的计算语言类的理论,我们得到了一个家庭作业,用一种语言来实现一段代码,该语言只有流控制的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语句或异常.不要使用它们.
我已经为此编写了一段代码(我将发布这些代码以证明这不是一个演示我的代码帖子).我有点好奇其他任何人都能想到的.
它可以通过一个while循环完成,但不是那么清楚:
while d == 0 do d := 1; a := 1 od x := a / d;
解释,如果d = 0,则d将为1,a也将为1.这结束循环.
现在x设置为a/d,这很好,因为如果d为0,则a/d的计算结果为1.
这是我的代码:
continue := True while d = 0 and continue do x := 1 continue := False od while d != 0 and continue do x := a/d continue := False od
这会有用吗?
td := d x := 1 while td != 0 do x := a / d td := 0 od