2011-11-14 60 views
3

我是新來的常見lisp,因此我的問題可能很容易,但是我沒有找到任何東西,也許我使用了錯誤的搜索條件。common lisp如何轉換其餘參數列表

我有以下問題: 我有一個功能,可以對任意數量的參數進行特殊的添加。下一步是將該函數應用於任意數量的相同大小的列表,結果將是該大小的列表。 它的工作原理,如果我叫 (mapcar #'addition list1 list2 ...) ,但如果我必須定義一個函數 (defun list-add (list &rest lists) (mapcar #'addition list lists)) 它不會工作,因爲&其餘名單現在是列表的列表。函數添加需要使用所有參數作爲序列來調用,所以遞歸調用是不可能的。

有沒有人有解決方案?

回答

5

參見APPLY

另請注意,價值爲CALL-ARGUMENTS-LIMIT

明顯的解決辦法是:

(defun list-add (&rest lists) 
    (apply #'mapcar #'addition lists)) 
0

我不知道我得到了正確的問題,但嘗試

(defun list-add (list &rest lists) 
    (mapcar (lambda (l) (apply #'addition list l)) 
      lists)) 
0

我不知道這是否一定比是好還是壞已經提供的答案,但這裏是我想出了:

(defun list-add (first-required-list &rest other-lists) 
    (let ((all-lists (cons first-required-list 
         other-lists))) 
    (reduce (lambda (left-list right-list) 
       (mapcar #'addition left-list right-list)) 
     all-lists)))