Lisp中的程序

时间:2017-07-03 03:22:21

标签: scheme lisp procedures

如果我在Lisp中定义以下过程会发生什么: (define(p)(p)) 它会带来什么价值?我不熟悉编程,但是我正在阅读这本书更深入,并使用Lisp作为示例,这让我感到困惑。

1 个答案:

答案 0 :(得分:6)

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

def p():
    return p()

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