-1
(defun occurrences (l)
(let (
(result (mapcar #'(lambda (elt) (cons elt (count elt l)))
(remove-duplicates l) ) )
(result2 nil)
(result3 nil)
(result4 nil)
)
(progn
(sort result #'> :key #'cdr)
(loop for x in result
do (and(push (car x) result2)(push (cdr x) result3))
)
)))
這應該按升序返回排序列表出現次數。除了重複最少次數的元素(與列表的其餘部分保持一致),不應返回。除非所有元素重複相同的次數,否則只有在這種情況下所有元素纔會返回。查找列表中出現次數最多的位置,並返回從最常出現的位置開始的列表
例如,
(出現「(1 2 3))=>(1 2 3),#notice每個元素重複次數相同#。
(occurrences'(1 1 3))=>(1)#因爲那裏1比列表中的任何其他元素出現得更頻繁。
3(出現 '(1 2 3 4 6 6 6 6))=>(6)
- (出現'(1 1 3 3 0) )=>(1,3)。 #since(1 2),(3 2)和(0 1) 因爲元素1和3的出現次數仍高於此列表中至少一個元素的出現次數。
注:現在此函數返回一個已排序列表中,但錯誤地返回最大值加元件,其發生,不在列表中的至少大於一個其它元件(OCC的數。)。例如, (發生'(7 7 7 1 2 3))返回(7 1 2 3),但應該只返回7.我真的很感謝一些幫助修復此函數返回期望值。
您可以保存一個通帶'((max-count(循環for elt in l maximize(incf(gethash elt table 0))))' – uselpa
@uselpa,這是一個非常優雅的,謝謝!我已經更新了答案。 – Renzo
謝謝您的幫助!您的解決方案令人印象深刻,並按預期工作... – user4557512