377 字
2 分钟
高级语言的最极简模型是什么?
图灵完备的最低要求,高级语言可以简化成什么?

图灵完备的最低要求#

高级语言的前提是图灵完备,所有高级语言可以简化成这样(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
高级语言的最极简模型是什么?
https://pinpe.top/posts/high-level-language-minimal-model/
作者
Pinpe
发布于
2024-09-23
许可协议
CC BY-NC-SA 4.0

如果此时间过长,文中的信息可能会失去时效性,甚至不再准确。