我有两个过程,一个用于计算列表中的元素,另一个用于从同一列表中删除相同的元素。同时计数和删除应该怎么做?我尝试了很长时间,但没有任何效果。我使用这个列表:(list 1 2 3 2 1 2 3),最后它应该是这样的:((1 . 2) (2 . 3) (3 . 2))。第一个对数是一个元素,第二个对数是所有列表中第一对数的总和。我的尝试:1) 它只适用于计数,结果是: ((1 . 2) (2 . 3) (3 . 2) (2 . 2) (1 . 1) (2 . 1) (3 . 1) ) 2) 它仅适用于删除,结果是: ((1 . 2) 2 3 2 2 3)
哪里有问题?
这是为了计数:
(define count-occurrences
(lambda (x ls)
(cond
[(memq x ls) =>
(lambda (ls)
(+ (count-occurrences x (cdr ls)) 1))]
[else 0])))
(出现次数 '2(列表 1 2 3 2 1 2 3))-> 3
这是为了删除:
(define (remove-el p s)
(cond ((null? s) '())
((equal? p (car s)) (remove-el p (cdr s)))
(else (cons (car s) (remove-el p (cdr s))))))
(删除-el '2 (list 1 2 3 2 1 2 3)) -> (1 3 1 3)