lisp中合并两个列表的分配函数
我试图在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
(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)…
。