Lisp 从其他列表中从列表中删除

Lisp 从其他列表中从列表中删除,lisp,common-lisp,clisp,Lisp,Common Lisp,Clisp,我有包含其他列表的列表(仅2级) 如何从包含一些对的列表中删除列表,第一个位置上的2个元素的相同组合和列表中的第二个位置或第三和第四个位置(在我的示例中为“SU”),并返回((SU S R)(SU R)) 我需要改变 ((susr)(susr)(surr))to=>((susr)(surr)) ((su R S U)(su S R)(su R))to=>((su R S U)(su S R)(su R))-不要更改,因为这里有两次或两次以上的对有su、rs、U和no su 小心: (subseq

我有包含其他列表的列表(仅2级)

如何从包含一些对的列表中删除列表,第一个位置上的2个元素的相同组合和列表中的第二个位置或第三和第四个位置(在我的示例中为“SU”),并返回
((SU S R)(SU R))

我需要改变

((susr)(susr)(surr))
to=>
((susr)(surr))

((su R S U)(su S R)(su R))
to=>
((su R S U)(su S R)(su R))
-不要更改,因为这里有两次或两次以上的对有su、rs、U和no su

小心:

(subseq '(a b c d) 0 10)
=> ERROR
您还可以使用获取列表的大小。您还可以使用以下函数

你想做什么 您希望从输入列表中删除满足以下谓词的元素:给定一个列表,该列表的子集等于
(su)
(请参见注释)

您的代码如下所示:

(defun remove-s-u-at-pos-3 (list)
  (remove-if (lambda (...) ...) list))

您需要提取每个访问列表的一部分,并将其与
(su)

进行比较。您可以使用remove if、lambda、equalp和subseq。好的,您可以比较每个列表的两个子集,但要注意短列表
(funcall (lambda (x) (string x)) :example)
=> "EXAMPLE"
(equalp '(S U) (list 's 'u))
=> T
(subseq '(a b c d) 0 3)
=> (A B C)
(subseq '(a b c d) 0 10)
=> ERROR
(nthcdr '(s u s u r u) 5)
=> (U)
(let ((list '(a b c d)))
  (ldiff list (nthcdr 10 list)))
=> (A B C D)

(let ((list '(a b c d)))
  (ldiff list (nthcdr 2 list)))
=> (A B)
(defun remove-s-u-at-pos-3 (list)
  (remove-if (lambda (...) ...) list))