簡體   English   中英

用於對元組列表進行排序的函數 - Haskell

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM