如果我要在Lisp中定义以下过程会发生什么情况: (define(p)(p)) 它会返回什么值?我是而不是编程新手,但我正在阅读这本书更深入,并使用Lisp的例子,这让我感到困惑。Lisp中的过程
Q
Lisp中的过程
1
A
回答
5
执行时,该过程将创建一个无限循环,并且永远不会返回一个值。我们正在定义一个名为p
的递归过程,它的主体是对自身的调用;因为没有基本情况,程序永远不会结束。在更熟悉的语法(比如Python的),它是与此相同:
def p():
return p()
你的程序被称为tail position,该方案可以优化利用的空间一定量 - 而Python解释不了做这种优化,并会由于堆栈溢出而迅速崩溃。
+2
根据Lisp实现(解释器或高调试设置),也可能会出现堆栈溢出。 Scheme要求TCO得到实现,解释器或编译器的支持。 Lisp没有。 –
相关问题
- 1. 在lisp程序结束后emacs lisp中的启动过程
- 2. LISP中的GUI编程?
- 3. Lisp中的线程同步
- 4. LISP通过
- 5. LISP程序
- 6. 在Lisp中编程乐透
- 7. Emacs Lisp:嵌套在ibuffer中超过`max-lisp-eval-depth'
- 8. 在sbcl lisp中使用线程时在lisp中变量unbound
- 9. LISP程序输出
- 10. C++程序中的Lisp解释器
- 11. Common Lisp中丰富的类型编程?
- 12. 在Lisp中通过BST搜索
- 13. 通过Lisp传递函数
- 14. Lisp中的冗余
- 15. lisp中的flatten list
- 16. 的#ifndef Common Lisp中
- 17. lisp中“#'”的行为
- 18. Emacs Lisp中的PPRINT?
- 19. Emacs Lisp中的strpos
- 20. 应用于阵列的Lisp格式过程
- 21. Common Lisp a Lisp-n?
- 22. LISP:在Ubuntu中运行程序
- 23. Common Lisp中
- 24. 发现Lisp中
- 25. 与Common Lisp中
- 26. common lisp编程EQ错误
- 27. Common Lisp并行编程
- 28. 变量在Lisp程序
- 29. Common Lisp程序错误
- 30. 通用LISP附加程序
相同:“10 GOTO 10” – coredump
是否有任何理由假设它不同于'int foo(){return foo(); }在C或Java中(抛开尾部优化)? –