如果我要在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中(拋開尾部優化)? –