Scheme Lisp中的程序

Scheme Lisp中的程序,scheme,lisp,procedures,Scheme,Lisp,Procedures,如果在Lisp中定义以下过程,会发生什么情况: (定义(p)(p)) 它将返回什么值?我对编程并不陌生,但我正在读一本更深入的书,它使用Lisp作为示例,这本书让我感到困惑。当执行时,该过程将创建一个无限循环,并且永远不会返回值。我们正在定义一个名为p的递归过程,其主体是对自身的调用;因为没有基本情况,程序永远不会结束。在更熟悉的语法中(比如Python),它与以下相同: def p(): return p() 正在调用您的过程,哪个方案可以优化以使用恒定的空间-而Python解释器无

如果在Lisp中定义以下过程,会发生什么情况: (定义(p)(p))
它将返回什么值?我对编程并不陌生,但我正在读一本更深入的书,它使用Lisp作为示例,这本书让我感到困惑。

当执行时,该过程将创建一个无限循环,并且永远不会返回值。我们正在定义一个名为
p
的递归过程,其主体是对自身的调用;因为没有基本情况,程序永远不会结束。在更熟悉的语法中(比如Python),它与以下相同:

def p():
    return p()

正在调用您的过程,哪个方案可以优化以使用恒定的空间-而Python解释器无法进行优化,并且会由于堆栈溢出而快速崩溃。

执行时,该过程将创建一个无限循环,并且永远不会返回值。我们正在定义一个名为
p
的递归过程,其主体是对自身的调用;因为没有基本情况,程序永远不会结束。在更熟悉的语法中(比如Python),它与以下相同:

def p():
    return p()

正在调用您的过程,哪个方案可以优化以使用恒定的空间-而Python解释器无法进行优化,并且会由于堆栈溢出而快速崩溃。

根据Lisp实现(解释器或高调试设置),也可能存在堆栈溢出。方案要求TCO由实现、解释器或编译器支持。Lisp没有。根据Lisp实现(解释器或高调试设置),也可能存在堆栈溢出。方案要求TCO由实现、解释器或编译器支持。Lisp没有。与“10 GOTO 10”相同,是否有理由假设它与C或Java中的
int foo(){return foo();}
不同(尾部调用优化除外)?与“10 GOTO 10”相同,是否有理由假设它与C或Java中的
int foo(){return foo();}
不同(把尾部调用优化放在一边)?