Lisp中的程序

1 lisp scheme procedures

如果我在Lisp中定义以下过程会发生什么: (define(p)(p)) 它将返回什么值?我不是编程的新手,但我正在阅读这本书更深入,并使用Lisp作为例子,这让我感到困惑.

Ósc*_*pez 6

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

def p():
    return p()
Run Code Online (Sandbox Code Playgroud)

您的过程在尾部位置调用,Scheme可以优化以使用恒定的空间量 - 而Python解释器无法进行优化,并且会因堆栈溢出而快速崩溃.

  • 根据Lisp实现(解释器或高调试设置),也可能存在堆栈溢出.Scheme要求TCO由实现,解释器或编译器支持.Lisp没有. (2认同)