几乎所有使用的编程语言都是图灵完成的 ,虽然这提供了表示任何可计算algorithm的语言,但它也带有一套自己的问题 。 看到我写的所有algorithm都是想停下来的,我希望能用一种能保证停止的语言来表示它们。 用于匹配string和有限状态机的 正则expression式在使用时会被使用,但是我想知道是否有一个更一般,广泛的语言不是图灵完整的? 编辑:我应该澄清,通过'通用'我不一定要能够写所有停止algorithm的语言(我不认为这样的语言会存在),但我怀疑有共同的线程在停止certificate,可以推广到产生一种语言,其中所有algorithm都保证停止。 还有另一种方法来解决这个问题 – 消除理论上无限的记忆的需要。 一旦限制了机器的内存容量,机器所处的状态数就是有限且可数的,因此可以确定algorithm是否会停止(不允许机器进入之前的状态)。
在Java中查看下面的无限while循环。 它会导致它下面的语句编译时错误。 while(true) { System.out.println("inside while"); } System.out.println("while terminated"); //Unreachable statement – compiler-error. 以下相同的无限while循环,但工作正常,不会发出任何错误,我只是用布尔variablesreplace条件。 boolean b=true; while(b) { System.out.println("inside while"); } System.out.println("while terminated"); //No error here. 在第二种情况下,循环后面的语句显然是不可达的,因为布尔variablesb是真的,编译器根本不会抱怨。 为什么? 编辑:下面的版本while明显陷入死循环中,但是对于它下面的语句没有编译器错误,即使循环中的if条件总是false ,因此循环永远不会返回,并且可以由编译器本身就是编译器。 while(true) { if(false) { break; } System.out.println("inside while"); } System.out.println("while terminated"); //No error here. while(true) { if(false) { //if true then also return; //Replacing return […]