2011-11-14 3 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))) 
関連する問題