2012-10-04 14 views
3

Common Lisp是否有創建通用函數的方法 其中專用於參數的關鍵字是關鍵字參數?專注於關鍵字的泛型函數

例如,而不是這樣的:

CL-USER> (defgeneric tst (a)) 
#<STANDARD-GENERIC-FUNCTION TST (0)> 
CL-USER> (defmethod tst ((a list)) 
      (print a)) 
#<STANDARD-METHOD TST (LIST) {1004ECC903}> 

..這規定了該參數 'A'。 我想有以下幾點:

CL-USER> (defgeneric tst (&key a)) 
#<STANDARD-GENERIC-FUNCTION TST (0)> 
CL-USER> (defmethod tst (&key (a list)) 
      (print a)) 
#<STANDARD-METHOD TST (LIST) {1004ECC903}> 

顯然,這種衝突與語法,所以我一點點卡設定的關鍵字參數的 默認值。在實際的代碼中,這個問題涉及到我選擇了一個不同的參數佈局,所以這不是問題(並且啓動起來有點整潔!)但是如果我再次遇到這個問題,我想我最好問問專家!

乾杯全部

回答

6

不,這不是Common Lisp提供的。

+0

無賴,謝謝! – Baggers

1

它不是直接支持,但你可以通過調度到一個通用函數來達到同樣的效果。

(defgeneric foo-impl (bar baz)) 

(defun foo (&key bar baz) 
    (foo-impl bar baz)) 
+0

這是如何導致OP想要的相同效果的? – Sim

+0

因爲專門研究'foo-impl'可以讓'foo'表現得好像它是專門化的。 – lmj