CLISP:根据另一个元素的顺序对列表进行排序

时间:2012-04-26 12:34:06

标签: list lisp

我有一个清单

(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)

1 个答案:

答案 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来表达“删除此列表中不属于其他列表的所有元素”的想法。