图灵完备的最低要求
高级语言的前提是图灵完备,所有高级语言可以简化成这样(Python语法):
- 条件判断:
if:...elif:...else:...
- 循环:
while ...:
- 变量和计算、判断系统(无论强类型还是弱类型):
x = ...
- 输入与输出:
input(...)
和print(...)
- 退出程序:
exit(0)
写一个循环递归程序:
a = 0
while a == 5:
a += 1
print(a)
exit(0)
去掉while,改用goto
首先,两种方式都可以实现死循环。
while True:
...
def func():
...
func()
func()
于是while
就不是最简的,goto
也能实现一样的功能:
a = 0
$ A # 新建一个标签
a += 1
print(a)
if a != 5:
goto A # 跳转到标签
exit(0)
为什么goto不内置条件判断?
条件判断也是一种跳转,因此也不是最简的,可以内置在goto
里:
a = 0
$ A
a += 1
print(a)
a != 5 goto A #在a!=5的情况下,跳转到标签,否则就跳过
exit(0)
让我们脱离Python语法
a: 0
:: A
a += 1
puts a
a != 5 goto A
exit
实战
secret: 42
guess: 0
attempts: 0
:: start
puts "我想了一个数字,试试看能否猜中!"
guess: key --获取用户输入并存储在 guess 变量中
attempts += 1
:: check_guess
guess < secret goto too_low
guess > secret goto too_high
puts "恭喜你,猜对了!"
puts "你总共尝试了"+attempts+"次。"
goto end
:: too_low
puts "太小了,再试一次吧!"
goto start
:: too_high
puts "太大了,再试一次吧!"
goto start
:: end
exit