而语言

Jas*_*ker 23 language-theory while-loop

对于我的计算语言类的理论,我们得到了一个家庭作业,用一种语言来实现一段代码,该语言只有流控制的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)
Run Code Online (Sandbox Code Playgroud)

这是从我的班级笔记中复制的,所以如果缺少或不正确,请不要责怪我!

要实现的代码是:

if d = 0 do
    x := 1
else
    x := a / d
Run Code Online (Sandbox Code Playgroud)

无论如何,如果您想继续使用上述语言规则进行编写,请继续.否则,请用你最熟悉的语言写下来.但是有一些注意事项!

  • 否则if语句或除while循环之外的任何其他类型的流控制.
  • 不作弊:上面的语法不包括任何break语句,return语句或异常.不要使用它们.

我已经为此编写了一段代码(我将发布这些代码以证明这不是一个演示我的代码帖子).我有点好奇其他任何人都能想到的.

Too*_*the 10

它可以通过一个while循环完成,但不是那么清楚:

while d == 0 do
  d := 1;
  a := 1
od
x := a / d;
Run Code Online (Sandbox Code Playgroud)

解释,如果d = 0,则d将为1,a也将为1.这结束循环.

现在x设置为a/d,这很好,因为如果d为0,则a/d的计算结果为1.


Jas*_*ker 9

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)


Zac*_*ena 7

这会有用吗?

td := d
x := 1

while td != 0 do
    x := a / d
    td := 0
od
Run Code Online (Sandbox Code Playgroud)