Scheme 方案:列表计数器

Scheme 方案:列表计数器,scheme,lisp,racket,Scheme,Lisp,Racket,我想实现一个计算列表中元素出现次数的函数 函数调用如下所示: (count '(a a x a 11 11 a 11 a)) 函数输出应为(成对列表): 感谢您提供如何以最佳方式实施计数程序的建议。“最佳”取决于您的需求和限制;下面是一个使用Racket内置过程的示例实现,该过程很短,但对于大型列表可能很慢: (define (mycount lst) (map (lambda (e) (cons e (count (curry eqv? e) lst))) (remove-d

我想实现一个计算列表中元素出现次数的函数

函数调用如下所示:

(count '(a a x a 11 11 a 11 a))
函数输出应为(成对列表):

感谢您提供如何以最佳方式实施计数程序的建议。

“最佳”取决于您的需求和限制;下面是一个使用Racket内置过程的示例实现,该过程很短,但对于大型列表可能很慢:

(define (mycount lst)
  (map
   (lambda (e) (cons e (count (curry eqv? e) lst)))
   (remove-duplicates lst)))
然后

如果您能更具体地了解您的约束条件,那么我们可能会更好地帮助您

(define (mycount lst)
  (map
   (lambda (e) (cons e (count (curry eqv? e) lst)))
   (remove-duplicates lst)))
> (mycount '(a a x a 11 11 a 11 a))
'((a . 5) (x . 1) (11 . 3))