Lisp合并模式

时间:2016-12-24 14:50:26

标签: list merge lisp

我在lisp中很新,所以也许这是一个愚蠢的问题。但是我想根据给定的模式合并两个列表(s1,s2) - 列出布尔值S3(t nil ....)。如果为true,则使用S2中的元素,如果为false则使用元素。所以决赛应该是这样的 s1(1 2 3 2 2 4)和s2(8 9 5 6 8 9)和S3(nil t nil t n nil)=> (1 8 3 9 5 4)

非常感谢! R上。

2 个答案:

答案 0 :(得分:3)

Lisp是一个语言系列。如果你的意思是Common Lisp,这里有一个可能的两行解决方案:

CL-USER> (defun merge-3 (s1 s2 s3)
           (loop for x in s1 if (pop s3) collect (pop s2) else collect x))
MERGE-3
CL-USER> (merge-3 '(1 2 3 2 2 4) '(8 9 5 6 8 9) '(nil t nil t t nil))
(1 8 3 9 5 4)

答案 1 :(得分:-2)

(defun select-lists (s1 s2 s3)
  (mapcar (lambda (s1e s2e s3e)
            (if s3e s2e s1e))
          s1 s2 s3))