【发布时间】:2016-12-24 14:50:25
【问题描述】:
我是 lisp 的新手,所以也许这是一个愚蠢的问题。但我想根据给定的模式合并两个列表(s1,s2) - 布尔值列表 S3(t nil ....)。如果为真,则使用 S2 中的元素,如果为假,则按原样使用该元素。所以决赛应该看起来像 s1 (1 2 3 2 2 4) 和 s2 (8 9 5 6 8 9) 和 S3 (nil t nil t t nil) => (1 8 3 9 5 4)
非常感谢! R.
【问题讨论】:
我是 lisp 的新手,所以也许这是一个愚蠢的问题。但我想根据给定的模式合并两个列表(s1,s2) - 布尔值列表 S3(t nil ....)。如果为真,则使用 S2 中的元素,如果为假,则按原样使用该元素。所以决赛应该看起来像 s1 (1 2 3 2 2 4) 和 s2 (8 9 5 6 8 9) 和 S3 (nil t nil t t nil) => (1 8 3 9 5 4)
非常感谢! R.
【问题讨论】:
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)
【讨论】: