2013-04-24 64 views
1

我想从方案中的嵌套列表中对元素进行计数,并按频率的顺序对它们进行排序。例如,我有一个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,但是根本找不到任何工作。

我希望有人能指出我需要的功能的方向。一旦我知道我可以使用什么功能,我很乐意玩这个代码,但是现在我已经打败了。谢谢!

回答

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) 
+0

非常感谢你,我会尽力而为。 – lameduck 2013-04-24 08:53:34

+0

完成,谢谢奥斯卡洛佩兹! – lameduck 2013-04-24 21:34:04