是否有可能构建一种图灵完备语言,其中每个字符串都是正确的程序?
任何例子?更好的是,任何现实世界的例子?
精确度:“正确”我的意思是“编译”,虽然“没有错误运行”和“无错运行,并且在有限时间内完成”也是有趣的问题:)
字符串我指的是任何字节序列,尽管对一组字符的限制都可以。
答案 0 :(得分:9)
答案 1 :(得分:7)
这是一个类似C语言的编译器,用BNF表示为
<program> ::= <character> | <character> <program>
#!/bin/bash
# full_language.sh
gcc "$1"
if [ $? != 0 ]
then
echo -e "#!/bin/bash\necho 'hi'" > a.out
chmod +x a.out
fi
答案 2 :(得分:5)
我们可以用任何图灵完整的语言来构建它。以C为例。如果输入是正确的C程序,那么就要做它想要的。否则,打印“Hello,world!”。或者什么都不做。
这是一种图灵完备的语言,其中每个字符串都是正确的程序。
答案 3 :(得分:4)
存在证明:perl。
答案 4 :(得分:2)
不,因为您对“正确”的定义不会留下“不正确”的余地,因为“正确”将包括所有可计算的数字和非暂停程序。回答肯定会使问题变得毫无意义,因为“正确”会失去它的定义。
答案 5 :(得分:2)
组合逻辑非常接近您提出的要求。每个字符串(在{K,S,@}字母表上)都可以扩展到程序。因此,althogh你的要求并没有完全实现,但结合逻辑可以满足它对前缀属性的直接削弱。
虽然这些程序在语法上是正确的,但它们并不一定会停止。这不一定是个问题:最初开发的组合逻辑用于研究理论问题,而不是用于实用的编程语言(尽管可以这样使用)。非停顿的组合逻辑“程序是否有趣?它们至少具有理论相关性吗?当然其中有些是这样的!例如,Omega是一个不停顿的组合逻辑术语,但它是文章,书籍章节的主题,它具有理性的趣味性,因此我们可以说,它是有意义的。
总结:如果我们将字母{K,S,@}视为组合逻辑,我们可以说,这个字母表中的每个可能的字符串都可以扩展(作为前缀)到语法正确的组合逻辑程序。其中一些不会停止,但即使是那些不停止的人在理论上也可能是有趣的,因此是“有意义的”(例如欧米茄)。
TokenMacGuy提供的答案比我的好,因为它从更广泛的角度来看待问题,也因为Jot受到了组合逻辑的启发,因此TokenMacGuy的答案取代了我的。
答案 6 :(得分:1)
如果“正确”你的意思是语法,那么当然,是的。
http://en.wikipedia.org/wiki/One_instruction_set_computer
http://en.wikipedia.org/wiki/Whitespace_(programming_language)
等
答案 7 :(得分:1)
Turing-complete和“在有限时间内完成”是不可能的。
摘自维基百科:http://en.wikipedia.org/wiki/Turing_completeness
“可计算性理论的一个重要结果是,通常不可能确定用图灵完备语言编写的程序是否会继续执行或将在有限的时间内停止(参见暂停问题)。” / p>
答案 8 :(得分:1)
您所描述的内容基本上类似于从Godel number到原始程序的映射。简而言之,这个想法是每个程序都应该可以简化为一个唯一的整数,你可以用它来得出关于程序的结论,比如某种oracle。一种这样的映射是Jot语言,它只有两个运算符,1和0,第一个运算符必须是1.