在使用REPL時,定義函數和宏是非常有用的,特別是如果您嘗試爲某個東西創建一個宏,然後將其模擬爲函數,並且每次都調用該宏。 Common Lisp有可能取消定義嗎?Lisp中可能有未定義的宏和函數嗎?
9
A
回答
11
是的,你可以使用fmakunbound
這個。
它適用於函數和宏。下面是一個例子REPL會話:
CL-USER> (defun add (n m) (+ n m))
ADD
CL-USER> (add 1 2)
3
CL-USER> (fmakunbound 'add)
ADD
CL-USER> (add 1 2)
; [snip]
; Evaluation aborted on #<UNDEFINED-FUNCTION ADD {C3305F1}>.
注意,這真的是fmak而非fmake。那仍然不時地讓我trips trips不安。
+2
在clisp-REPL中,我只鍵入「(fm」和tabulator,所以我不'不必知道fmak或fmake。 – porky11
9
取消定義宏或函數並不意味着此更改傳播通過代碼。
如果你有一個宏並想重新定義它作爲一個函數,那麼你也必須重新編譯使用宏的代碼。
請注意,如果您編譯的代碼具有某些優化(內聯),則需要重新編譯更多代碼。即使重新定義的函數也可能沒有效果,直到使用的代碼也被重新編譯爲止。
相關問題
- 1. LISP中未定義的函數錯誤
- 2. Lisp:宏與函數
- 3. 「 @」在LISP宏函數
- 4. C++中的宏可以定義宏嗎?
- 5. 在原型函數中,'this'可能是未定義的嗎?
- 6. 可能未定義的宏:AC_MSG_FAILURE
- 7. 錯誤:可能未定義的宏:AS_IF
- 8. 可能未定義的宏:AC_SUBST
- 9. 操作可能未定義的宏
- 10. lisp的自定義'+'(總和)函數
- 11. 增量宏定義可能嗎?
- 12. 可能-未定義參數PHP函數
- 13. EVAL:Common Lisp中未定義功能
- 14. 定義數據特定的Clojure函數,可能與宏?
- 15. 無法用我的Emacs-Lisp宏定義函數
- 16. Lisp加載錯誤:調度宏中的未定義字符
- 17. Lisp中的SQLITE用戶定義函數
- 18. 是否有可能在lisp中將遞歸函數重寫爲宏?
- 19. 定義函數宏
- 20. 如何理解Lisp中宏定義中的參數綁定?
- 21. Autorreconf和「錯誤:可能未定義的宏:AM_NLS」
- 22. sweet.js宏可以定義其他宏嗎?
- 23. 此功能未定義:IF(Emacs Lisp)
- 24. 如何在LISP函數中調用宏?
- 25. 如何在LISP中定義LAMBDA函數?
- 26. 我的LISP函數是一個未綁定的變量嗎?
- 27. 可以定義具有goto語句和標籤的宏嗎?
- 28. AS_IF和AC_MSG_ERROR:錯誤:可能未定義宏
- 29. 如何將「define」定義爲宏,有可能嗎?
- 30. 您可以爲條件編譯定義函數樣式宏嗎?
另請參閱[如何刪除Lisp中的變量/表單?](http://stackoverflow.com/q/21231775/1281433) –