方案:列表计数器

时间:2014-12-18 11:01:35

标签: scheme lisp racket

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

函数调用将是这样的:

(count '(a a x a 11 11 a 11 a))

函数输出应该是(对的列表):

( (a . 5) (x . 1) (11 . 3) )

感谢您了解如何实施计数程序的最佳方式。

1 个答案:

答案 0 :(得分:1)

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

(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))

如果您可以更加具体地了解您的约束,那么我们可以更好地帮助您。