计算方案中嵌套列表中的元素

时间:2013-04-24 02:54:15

标签: scheme

我正在尝试从方案中的嵌套列表中计算元素,并按频率顺序对它们进行排序。例如,我有一个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>

我希望有人能指出我需要的功能方向。一旦我知道我可以使用哪些功能,我很高兴能够使用代码,但这让我现在很好。谢谢!

1 个答案:

答案 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)