2013-02-22 48 views
1

如何獲取提供給Lisp函數的參數數目,如bash中變量$ 0所示? (我看到一個類似的問題,但它沒有給出答案。)如何獲取提供給lisp函數的參數個數

+0

你知道如何定義一個可變參數的函數嗎?最簡單的函數定義不會,所以毫無疑問傳遞了多少個參數。如果您學習如何定義可變參數函數,將很容易找出如何確定傳遞了多少個參數。 – Mars 2013-04-05 05:17:04

回答

3

這並不清楚你在問什麼,但在Common Lisp中,你可以使用&rest參數來收集一個不確定數量的參數到列表中。使用length你可以看到提供了多少個。例如:

CL-USER> (defun numargs (&rest arguments) 
      (length arguments)) 
NUMARGS 
CL-USER> (numargs 1 2 3) 
3 
CL-USER> (numargs 1 2 3 4 5) 
5 
CL-USER> (numargs) 
0 

因爲這個問題有標籤,你可能會感興趣的特定SBCL的解決方案。 sb-introspect:function-lambda-list看上去相關:

CL-USER> (sb-introspect:function-lambda-list 'cons) 
(SB-IMPL::SE1 SB-IMPL::SE2) 
CL-USER> (sb-introspect:function-lambda-list 'numargs) 
(&REST ARGUMENTS) 

如果檢查拉姆達列表,你可以決定一個函數可以有多少論據走。

相關問題