Thank you very much, Ribarm and Lee-Mac, but I do not think the proposed solutions can be accepted.
In fact, they fail if the lists to be compared contain both multiple terms, e.g. '(3 3 3 3 2) and ' (3 3 7 2) for which the correct result is (3 3 2).
I think the solution could be the following correction of the function GC:INTERSECT, which I built with the function GC:REMOVEFIRST
(defun GC: INTERSECT (l1 l2 / ec)
(if l1
(if (member (setq and c (car l1)) l2)
(progn (setq l2 (GC: REMOVEFIRST and c l2))
(cons ec (GC: INTERSECT (cdr l1) l2)))
(GC: INTERSECT (cdr l1) l2))))
(defun GC:REMOVEFIRST (ele lst)
(if (equal ele (car lst))
(cdr lst)
(cons (car lst) (GC:REMOVEFIRST ele (cdr lst)))))
(GC: INTERSECT '(3 3 3 3 2)' (3 3 7 2)) -> (3 3 2)