是否可以找到一個函數的參數列表,給定一個函數對象(或函數的符號)在通用lisp中?在Common Lisp中確定函數參數列表
9
A
回答
12
這是爲每個CL執行但斯旺克包不同(提供煤泥,其可以顯示在FE Emacs的迷你緩衝區arglists)在單個功能包此設置:
* (defun testfn (arg1 arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3)))
TESTFN
* (swank-backend:arglist #'testfn)
(ARG1 ARG2 &KEY (ARG3 :A))
這也將工作方法:
* (defmethod testmethod ((arg1 t) arg2 &key (arg3 :a)) (declare (ignore arg1 arg2 arg3)))
STYLE-WARNING: Implicitly creating new generic function TESTMETHOD.
#<STANDARD-METHOD TESTMETHOD (T T) {1005670231}>
* (swank-backend:arglist #'testmethod)
(ARG1 ARG2 &KEY (ARG3 :A))
獲得Swank最簡單的方法是使用Quicklisp。
6
我不知道標準的方式,但在SBCL中,您可以使用sb-introspect:function-lambda-list
。
(defun test (a &rest rest &key (b 42)) nil)
(sb-introspect:function-lambda-list #'test)
=> (A &REST REST &KEY (B 42))
5
ANSI Common Lisp提供函數FUNCTION-LAMBDA-EXPRESSION,如果實現支持它並且表達式已被記錄,則該函數可能會返回一個lambda表達式。在lambda表達式中,第二項是參數列表 - 像往常一樣。
否則返回一個參數列表沒有在ANSI Common Lisp標準中定義,並且是特定Lisp實現的一部分。例如,在某些「交付」Lisp應用程序中,此信息可能不存在。
通常最常見的Lisp實現將在某些內部包中具有導出函數ARGLIST。
相關問題
- 1. 傳遞函數列表中的Common Lisp
- 2. 調用的函數Common Lisp的列表
- 3. 在Common Lisp中擴展&rest參數
- 4. Common Lisp EVAL函數語錄
- 5. 子列表Common Lisp中
- 6. Common Lisp中的高階函數語法
- 7. Common Lisp中的函數持久性
- 8. Common Lisp:在後臺運行函數
- 9. common lisp如何轉換其餘參數列表
- 10. 在Common Lisp中合併列表項(Clisp)
- 11. 在Common Lisp中轉置列表
- 12. Common Lisp - 編寫一個檢測循環列表的函數
- 13. 是否有基於sbcl的common-lisp添加(列表)函數?
- 14. Common Lisp:檢查元素是否爲列表成員的函數
- 15. 在Common Lisp變量中定義和使用函數
- 16. Common Lisp的 - 在列表列出
- 17. 返回錯誤值的Common Lisp函數
- 18. 在Common Lisp中正確傳遞列表給一個宏
- 19. 如何從Common Lisp REPL提示符檢查已定義函數的列表
- 20. 在Common Lisp中編程 - 多次調用同一個列表作爲參數的函數
- 21. 如何修改Common Lisp中的函數綁定?
- 22. Common Lisp中,列表處理(追加等)
- 23. Common Lisp從列表中創建矩陣
- 24. 轉換字符串列表Common Lisp中
- 25. Common Lisp中的圓形列表
- 26. 創建列表作爲參數傳遞給LISP中的函數
- 27. Common Lisp中
- 28. 與Common Lisp中
- 29. Common-LISP編程中具有兩個字符串參數的調用函數
- 30. 如何在Common Lisp的宏參數中創建一個單詞?
Swank作爲兼容性層?有趣 – sabof