lisp中合并两个列表的分配函数

lisp中合并两个列表的分配函数,lisp,common-lisp,Lisp,Common Lisp,我试图在lisp中创建一个函数,它接收两个列表并将它们的值分配到一个新列表中。我需要得到第一个列表的值并应用于第二个列表的每个元素 例如: (funcA '("A" "B" "C") '("D" "E" "F")) 并返回如下内容: ((("A" "B" "C") . "D") (("A" "B" "C") . "E") (("A" "B" "C") . "F")) CL-USER> (defun funcA (list1 list2) (if (null list1

我试图在lisp中创建一个函数,它接收两个列表并将它们的值分配到一个新列表中。我需要得到第一个列表的值并应用于第二个列表的每个元素

例如:

(funcA '("A"  "B"  "C") '("D" "E" "F"))
并返回如下内容:

((("A" "B" "C") . "D")
 (("A" "B" "C") . "E")
 (("A" "B" "C") . "F"))
CL-USER> (defun funcA (list1 list2)
    (if (null list1 )
        nil
        (if ( null list2)
            nil
        (cons (cons list1 (car list2 )) 
               (funcA list1  (cdr list2))))))

FUNCA

CL-USER> (funcA '("A" "B" "C") '("D" "E" "F"))
((("A" "B" "C") . "D") (("A" "B" "C") . "E") (("A" "B" "C") . "F"))
问题是:我无法获得
汽车的

这是我的密码:

(defun funcA (list1 list2)
  (if (null list1)
      nil
      (if (null list2)
          nil
          (cons (cons (cdr list1) (car list2)) 
                (funcA list1 (cdr list2))))))
上面的函数返回我:

((("B" "C") . "D")
 (("B" "C") . "E")
 (("B" "C") . "F"))

我不明白函数funcA的用法。但如果你说它应该按如下方式工作:

例如:

(funcA '("A"  "B"  "C") '("D" "E" "F"))
(A"B"C)(D"E"F)

并返回如下内容:

((("A" "B" "C") . "D")
 (("A" "B" "C") . "E")
 (("A" "B" "C") . "F"))
CL-USER> (defun funcA (list1 list2)
    (if (null list1 )
        nil
        (if ( null list2)
            nil
        (cons (cons list1 (car list2 )) 
               (funcA list1  (cdr list2))))))

FUNCA

CL-USER> (funcA '("A" "B" "C") '("D" "E" "F"))
((("A" "B" "C") . "D") (("A" "B" "C") . "E") (("A" "B" "C") . "F"))
(“A”“B”“C”“D”)(“A”“B”“C”“E”)(“A”“B”“C”“F”))

您的代码与解决方案很接近,但您需要像这样删除un lisp过程:

((("A" "B" "C") . "D")
 (("A" "B" "C") . "E")
 (("A" "B" "C") . "F"))
CL-USER> (defun funcA (list1 list2)
    (if (null list1 )
        nil
        (if ( null list2)
            nil
        (cons (cons list1 (car list2 )) 
               (funcA list1  (cdr list2))))))

FUNCA

CL-USER> (funcA '("A" "B" "C") '("D" "E" "F"))
((("A" "B" "C") . "D") (("A" "B" "C") . "E") (("A" "B" "C") . "F"))
你可以看到最后一行等于你想要的

(“A”“B”“C”“D”)(“A”“B”“C”“E”)(“A”“B”“C”“F”))

问题在于这句话:


(cons(cons(cdr-list1)(car-list2))=>应该是(cons(cons(cons-list1(car-list2))

我不明白函数funcA的用法。但是如果你说它应该按如下方式工作:

例如:

(funcA '("A"  "B"  "C") '("D" "E" "F"))
(A"B"C)(D"E"F)

并返回如下内容:

((("A" "B" "C") . "D")
 (("A" "B" "C") . "E")
 (("A" "B" "C") . "F"))
CL-USER> (defun funcA (list1 list2)
    (if (null list1 )
        nil
        (if ( null list2)
            nil
        (cons (cons list1 (car list2 )) 
               (funcA list1  (cdr list2))))))

FUNCA

CL-USER> (funcA '("A" "B" "C") '("D" "E" "F"))
((("A" "B" "C") . "D") (("A" "B" "C") . "E") (("A" "B" "C") . "F"))
(“A”“B”“C”“D”)(“A”“B”“C”“E”)(“A”“B”“C”“F”))

您的代码与解决方案很接近,但您需要像这样删除un lisp过程:

((("A" "B" "C") . "D")
 (("A" "B" "C") . "E")
 (("A" "B" "C") . "F"))
CL-USER> (defun funcA (list1 list2)
    (if (null list1 )
        nil
        (if ( null list2)
            nil
        (cons (cons list1 (car list2 )) 
               (funcA list1  (cdr list2))))))

FUNCA

CL-USER> (funcA '("A" "B" "C") '("D" "E" "F"))
((("A" "B" "C") . "D") (("A" "B" "C") . "E") (("A" "B" "C") . "F"))
你可以看到最后一行等于你想要的

(“A”“B”“C”“D”)(“A”“B”“C”“E”)(“A”“B”“C”“F”))

问题在于这句话:

(cons(cons(cdr list 1)(car list 2))=>应该是(cons(cons(cons list 1)(car list 2))

为什么不只是

(defun funcA (list1 list2)
  (mapcar (lambda (el) (cons list1 el)) list2))
为什么不

(defun funcA (list1 list2)
  (mapcar (lambda (el) (cons list1 el)) list2))

您可以使用循环宏。“collect”关键字使循环压缩结果并将其作为列表返回:

(defun funcA (list1 list2)
     (loop for i in list2
        collect (cons list1 i)))
注意上面代码中list1和list2的位置

以这种方式称之为:

 (funca '("a" "b" "c") '("d" "e" "f"))
返回:

((("a" "b" "c") . "d") (("a" "b" "c") . "e") (("a" "b" "c") . "f"))

您可以使用loop宏。“collect”关键字使loop压缩结果并将其作为列表返回:

(defun funcA (list1 list2)
     (loop for i in list2
        collect (cons list1 i)))
注意上面代码中list1和list2的位置

以这种方式称之为:

 (funca '("a" "b" "c") '("d" "e" "f"))
返回:

((("a" "b" "c") . "d") (("a" "b" "c") . "e") (("a" "b" "c") . "f"))
您只需要
(cons list1(car list2))
而不是
(cons(cdr list1)…
。您只需要
(cons list1(car list2))
而不是
(cons(cdr list1)…