我正在尝试从方案中的嵌套列表中计算元素,并按频率顺序对它们进行排序。例如,我有一个listP,看起来像'((1 3 6)(1 4 7)(1 5 8)(2 5 7)),我想让方案告诉我元素的频率顺序是( 1 5 7 2 3 4 6 8)。其实我只需要最常用的三个,所以(1 5 7)。
我找不到一个能找到最常用元素的函数,然后获得次最频繁的元素,等等。我已经尝试过max,min,map,length和count但是根本无法正常工作。< / p>
我希望有人能指出我需要的功能方向。一旦我知道我可以使用哪些功能,我很高兴能够使用代码,但这让我现在很好。谢谢!
答案 0 :(得分:1)
这看起来像@ ChrisJester-Young的bagify
工作。这是一个可能的解决方案,在Racket中测试并使用Chris的第三个bagify
实现:
(define (frequency lst)
(map car
(sort (hash->list (bagify (append* lst)))
(lambda (x y) (> (cdr x) (cdr y))))))
(frequency '((1 3 6) (1 4 7) (1 5 8) (2 5 7)))
=> '(1 5 7 2 3 4 6 8)