[英]Function to sort a list of tuples - Haskell
對不起,這個簡單的問題就是我對haskell非常新的..
我正在嘗試編寫一個函數“order”,它將對由另一個函數“frequency”生成的元組列表進行排序(頻率計算列表中不同元素的數量a給出一個這樣的結果,比如>頻率“aabbbccc”,將結果,[(2,a),(3,b),(3,c)])按升序排列。 我無法弄清楚如何寫它。
如果我在前奏中寫入>排序(頻率分數),它將對其進行排序(分數是等級列表,即[“a”,“b”,“c”,“c”]。
但是當我嘗試寫一個函數時..
results :: [a] -> [(Int, a)]
results = sort (frequency score)
遺憾的是,這種排序適用於太多的論點。
抱歉顯而易見的問題,並提前感謝。
你忘了讓你的功能參與爭論。
results :: [a] -> [(Int, a)]
results score = sort (frequency score)
沒有它,編譯器會看到你的類型簽名,並推斷為了返回[a] -> [(Int, a)]
類型的東西, sort
必須采用另一個參數,而不是。
但是,接下來的問題是您無法對具有任意組件類型的元組列表進行排序。 請參閱@ luqui的答案,了解如何處理。
你確定它說過sort
應用了太多的參數嗎? 對我來說,看起來你給出了錯誤的類型簽名。 這可能很容易:
results :: (Ord a) => [a] -> [(Int, a)]
(即你不能對[(Int, a)]
的列表進行排序[(Int, a)]
除非a
是具有Ord
ering的類型,即你可以比較元素)。
但是,這個簽名並不是真的必要,你也可以sortBy (\\xy -> compare (fst x) (fst y))
,它有許多慣用的簡潔方法,但對於新手我認為最好是明確的。 這種方式並不需要比較a
S,因為它只着眼於Int
秒。
編輯 :哦是的,我明白為什么它會說sort
被應用太多的參數。 見@ hammar的回答。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.