如何在Scheme中的列表中同时计数和删除元素
我有两个过程,一个用于计算列表中的元素,另一个用于从同一列表中删除同一元素。我应该如何同时计数和删除?我尝试了很长时间,但没有任何效果。我使用这个列表:(列表123123),最后应该是这样的:((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) 问题在哪里 这是用来计数的:如何在Scheme中的列表中同时计数和删除元素,scheme,Scheme,我有两个过程,一个用于计算列表中的元素,另一个用于从同一列表中删除同一元素。我应该如何同时计数和删除?我尝试了很长时间,但没有任何效果。我使用这个列表:(列表123123),最后应该是这样的:((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) 问题在哪里 这是用来计数的: (de
(define count-occurrences
(lambda (x ls)
(cond
[(memq x ls) =>
(lambda (ls)
(+ (count-occurrences x (cdr ls)) 1))]
[else 0])))
(计数出现次数'2(列表123))->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(列表1 2 2 1 2 3))->(1 3 1 3)立即返回计数和删除的列表即可。我称之为例行公事 计数删除。(请原谅所有不惯用或效率不高的策划人) 以下是一些用法:
(计数图’(1 1 2 3 2))
((1 . 2) (2 . 2) (3 . 1))
谢谢。这对我来说有点复杂,因为我只是一个初学者,但它是有效的。我应该更加努力地学习这个计划。
(define (count-remove ls x)
(letrec ([loop (lambda (count l removed)
(cond
[(eq? l '()) (list count removed)]
[(eq? (car l) x) (loop (+ 1 count) (cdr l) removed)]
[else (loop count (cdr l) (cons (car l) removed))]))])
(loop 0 ls '())))
(define (count-map ls)
(cond
[(eq? ls '()) '()]
[else
(letrec ([elem (car ls)]
[cr (count-remove ls elem)])
(cons (cons elem (car cr)) (count-map (cadr cr))))]))