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,但根本没有任何工作。

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

4

1 回答 1

1

这看起来像是 @ChrisJester-Young's 的工作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)
于 2013-04-24T03:35:35.417 回答