リスト内の要素をカウントするための手順と、同じリストから同じ要素を削除するための手順の 2 つがあります。カウントと削除を同時に行うにはどうすればよいですか? 私は長い間それを試していますが、何も機能していません。私はこのリストを使用します: (list 1 2 3 2 1 2 3)、最終的には ((1 . 2) (2 . 3) (3 . 2)) のようになります。ペアの最初の数は要素であり、ペアの 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])))
(count-occurrences '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))))))
(削除エル '2 (リスト 1 2 3 2 1 2 3)) -> (1 3 1 3)