方案:列表计数器

标签 scheme lisp racket

<分区>

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

函数调用是这样的:

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

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

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

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

最佳答案

“最佳”取决于您的需求和限制;这是一个使用 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))

如果您能更具体地说明您的限制条件,那么我们可能会更好地帮助您。

关于方案:列表计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27544996/

相关文章:

racket - 如何将合约绑定(bind)到匿名类定义

file-io - Racket 中的文件输出有最大长度吗?

scheme - `values` 在 Scheme 中是如何工作的?

math - Racket /方案中的总和平方

lisp - 从列表中删除列表

lisp - 想学习普通的 lisp

string - 在 Racket 中是否有一种简单的方法将字符串转换为变量名称(标识符)?

scheme - 成员? Racket 中的功能

loops - 在Scheme中编写While循环

scheme - 小Schemer eqlist?功能 - 替代版本?