用于对元组列表进行排序的函数 - Haskell

use*_*742 3 haskell

对不起,这个简单的问题只是我对哈斯克尔来说非常新.

我正在尝试编写一个函数"order",它将对由另一个函数"frequency"生成的元组列表进行排序(频率计算列表中不同元素的数量a给出一个这样的结果,比如>频率"aabbbccc",将结果,[(2,a),(3,b),(3,c)])按升序排列.我无法弄清楚如何写它.

如果我在前奏中写入>排序(频率分数),它将对其进行排序(分数是等级列表,即["a","b","c","c"].

但是当我尝试写一个函数时..

results :: [a] -> [(Int, a)]
results = sort (frequency score)
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这种排序适用于太多的论点.

抱歉显而易见的问题,并提前感谢.

ham*_*mar 9

你忘了让你的功能参与争论.

results :: [a] -> [(Int, a)]
results score = sort (frequency score)
Run Code Online (Sandbox Code Playgroud)

没有它,编译器会看到你的类型签名,并推断为了返回类型的东西[a] -> [(Int, a)],sort必须采取另一个参数,而不是.

但是,接下来的问题是您无法对具有任意组件类型的元组列表进行排序.请参阅@ luqui的答案,了解如何处理.

  • 注意,使用`sort`,需要对`a`的`Ord`约束. (2认同)