1

スキームでネストされたリスト内の要素をカウントし、それらを頻度順にランク付けしようとしています。たとえば、この '((1 3 6)(1 4 7)(1 5 8)(2 5 7)) のような listP があり、要素の頻度の順序が ( 1 5 7 2 3 4 6 8)。実際には、最も頻繁に使用される 3 つだけが必要なので、(1 5 7) です。

最も頻度の高い要素を見つけてから、次に頻度の高い要素を取得するなどの関数が見つかりません。最大、最小、マップ、長さ、およびカウントを試しましたが、何も機能しませんでした。

誰かが私が必要とする機能の方向性を教えてくれることを願っています。使用できる機能がわかったら、喜んでコードをいじりますが、これですぐに打ち負かされます。ありがとう!

4

1 に答える 1

1

これは @ChrisJester-Young の仕事のようbagifyです。Racket でテストされ、Chris の 3 番目の実装を使用してテストされた 1 つの可能なソリューションを次に示します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 に答える