我必須撰寫elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)]應該計算串列中每個元素的出現次數,并將元素和結果回傳到元組串列中。
例如:
elemFreqByFirstOcc "adbcba" == [('a',2),('d',1),('b',2),('c',1)]
elemFreqByFirstOcc [1,2,1,3,3,2,1,4,3,2,1,1,1,4,6,5] == [(1,6),(2,3),( 3,3),(4,2),(6,1),(5,1)]
到目前為止,我有這段代碼,如果串列中的所有元素只顯示一次,它就可以正常作業,但是當一個元素出現更多次時,它們每次都會被計算在內。(所以對于第一個例子,它回傳[('a',2),('d',1),('b',2),('c',1),('b',1),('a',1)])
elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)]
elemFreqByFirstOcc [] = []
elemFreqByFirstOcc [x] = [(x, 1)]
elemFreqByFirstOcc (x:xs) = zip [x] [(length $ filter (==x) (x:xs))] elemFreqByFirstOcc xs
uj5u.com熱心網友回復:
您需要過濾掉已經計算過的專案,因此:
elemFreqByFirstOcc :: Eq a => [a] -> [(a, Int)]
elemFreqByFirstOcc [] = []
elemFreqByFirstOcc (x:xs) = (x, length (filter (x ==) xs) 1) : elemFreqByFirstOcc (filter (x /=) xs)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/411545.html
標籤:
上一篇:決議執行塊中的錯誤
下一篇:我的玩具語言的評估器不會輸入檢查
