【问题标题】:Scheme: list counter [duplicate]方案:列表计数器 [重复]
【发布时间】:2014-12-18 11:01:35
【问题描述】:

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

函数调用是这样的:

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

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

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

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

【问题讨论】:

    标签: scheme lisp racket


    【解决方案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))
    

    如果您可以更具体地了解您的限制条件,那么我们可能会为您提供更好的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-24
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      相关资源
      最近更新 更多