我有一个清单
(SetQ L '(1 j 3 k 4 h 5 n 6 w))
我必须做一个函数Order,它在入口处有一个带有'n'个原子的列表,它必须检查该列表的每个原子是否包含在列表L中,并按照列表L中指定的顺序对它们进行排序,如果atom不是列表L的一部分,那么结果将显示
(Defun Order lst)
(SetQ L2'(w o 5 j 3))
我想验证一下:
(Order L2)
结果应该返回:
(J 3 5 W)
答案 0 :(得分:3)
提示:
之前,你问过这个问题:
CLISP : Check if two elements are in order one after another in a list
此函数与问题有关,因为它可以在调用标准Lisp函数sort
时用作比较函数。
Lisp函数intersection
可以生成一个列表,该列表仅包含一个列表中出现在另一个列表中的那些元素。这是一个集合操作,因此它可以压缩重复;另一种方法是使用remove-if-not
,其中测试谓词是一个lambda函数,它使用member
来表达“删除此列表中不属于其他列表的所有元素”的想法。