我无法使用Haskell代码满足Wikipedia的定义:
main = return ()
Run Code Online (Sandbox Code Playgroud)
要么
main = undefined
Run Code Online (Sandbox Code Playgroud)
最重要的是,“计算机程序是指令1的集合”,其中指令是这样定义的。
按照这两个定义,是main = return ()计算机程序吗?定义是否引用了机器代码?
如果是...为什么?如果不是,那么在Haskell中什么被视为程序?
程序的定义完全不需要它具有显式的I / O。例如,考虑/bin/sleep。除了在固定的时间内不执行任何操作外,它实际上不执行任何操作。最终,它确实具有输入/输出,因为它“导致”(在术语的狭义上)时间的变化。
另一个示例可能是Python程序,例如:
while True:
pass
Run Code Online (Sandbox Code Playgroud)
从字面上看,它所做的只是产生热量,但没有理由认为它不是程序。
未优化的程序构建实际上可能包含机器指令,以将立即值加载5到某些寄存器中,然后终止程序。但是,像Haskell's这样的优化编译器会推断出该值从未使用过,并且很乐意将其完全剔除(而且这样做是免费的,因为它不会产生任何可观察到的效果。程序终止的机器指令仍会虽然存在。