在Common Lisp中将列表一起压缩-“ and”问题。

|| 我正在尝试做的是创建一个函数
zip
(现在要注意,这不是家庭作业),该函数同时遍历多个列表,将一个函数应用于每个元素列表,如下所示:
(zip f \'(1 2 3) \'(4 5 6) \'(7 8 9)) = (list (f 1 4 7) (f 2 5 8) (f 3 6 9))
(zip f \'(1 2 3 4) \'(5 6) \'(7 8 9)) = (list (f 1 5 7) (f 2 6 8))
基本上,当任何列表用完元素时,它都会停止。这是我目前的尝试:
(defun zip (f &rest lists)
  (if (apply and lists) ; <- Here is where I think the problem is.
    (cons (apply f (mapcar #\'car lists)) (zip f &rest (mapcar #\'cdr lists)))
    nil))
我想知道如何修正条件语句以使其与
and
兼容,或达到这种效果。我认为问题出在“ 3”是一个宏。我还想知道是否已经有内置函数可以执行此操作。     
已邀请:
        您正在重新实施
mapcar
? (mapcar #\'list \'(1 2 3) \'(4 5 6) \'(7 8 9))
((1 4 7) (2 5 8) (3 6 9))
? (mapcar #\'list \'(1 2 3 4) \'(5 6) \'(7 8 9))
((1 5 7) (2 6 8))
? (mapcar #\'+ \'(1 2 3) \'(4 5 6) \'(7 8 9))
(12 15 18)
? (mapcar #\'+ \'(1 2 3 4) \'(5 6) \'(7 8 9))
(13 16)
顺便说一句,您想要在代码中代替
all
的函数是
and
    

要回复问题请先登录注册