在Python,我可以這樣做:Lisp的:檢查功能決定了其所需的參數
>>> def foo(x,y,z=1):
return x+y*z
>>> foo.func_code.co_varnames
('x', 'y', 'z')
>>> foo.func_defaults
(1,)
,並從它,知道有多少參數必須以調用foo()。我如何在Common Lisp中執行此操作?
在Python,我可以這樣做:Lisp的:檢查功能決定了其所需的參數
>>> def foo(x,y,z=1):
return x+y*z
>>> foo.func_code.co_varnames
('x', 'y', 'z')
>>> foo.func_defaults
(1,)
,並從它,知道有多少參數必須以調用foo()。我如何在Common Lisp中執行此操作?
大多數實現提供了這樣做的方法,但沒有一個是標準化的。如果你絕對需要它,斯旺克(的SLIME的Common Lisp的一部分)有一個名爲swank-backend:arglist
功能,據我所看到的,你想要做什麼:
CCL> (swank-backend:arglist 'if)
(TEST TRUE &OPTIONAL FALSE)
CCL> (swank-backend:arglist 'cons)
(X Y)
CCL> (swank-backend:arglist (lambda (a b c &rest args)))
(A B C &REST ARGS)
我不知道,你可以依靠但它在未來仍然可用。
通常大多數Lisp在某些包中都有一個叫做ARGLIST的函數。 LispWorks將其稱爲FUNCTION-LAMBDA-LIST。
有關LispWorks中的信息,如果將光標放在函數符號上,則control-shift-a將顯示arglist。在LispWorks中還有一個可以加載的'arglist-on-space'功能。輸入符號和空格後,IDE將顯示參數列表。
還有CL:DESCRIBE函數。它描述了各種對象。在大多數CL實現中,它也應該顯示函數的參數列表。
下面的例子是Clozure Common Lisp的:
Welcome to Clozure Common Lisp Version 1.6-r14468M (DarwinX8664)!
? (defun foo (x y &optional (z 1)) (+ x (* y z)))
FOO
? (arglist #'foo)
(X Y &OPTIONAL Z)
:ANALYSIS
? (describe #'foo)
#<Compiled-function FOO #x302000550F8F>
Name: FOO
Arglist (analysis): (X Y &OPTIONAL Z)
Bits: 8405508
...
如果你想知道這只是編輯時,泥+ Emacs會照顧你們能這樣:
例如在emacs的口齒不清模式+煤泥,打字
(format
將在底部迷你緩衝區顯示格式的參數。
我懷疑這取決於lisp變體/實現。 – 2010-12-10 00:55:01
好點。我編輯澄清。 – Ishpeck 2010-12-10 03:09:09