我在Haskell中创建一个递归的合并排序函数.作为评估的一部分,我被告知必须将类型定义为:
isort :: Ord a => [a] -> [a]
Run Code Online (Sandbox Code Playgroud)
我假设函数需要一个数组作为输入并输出一个数组.我知道那ord是一堂课.
在上面的上下文中是什么Ord a意思?
这是我的功能:
isort :: Ord a => [a] -> [a]
isort [x] = [x]
isort (x:xs) = insert x (isort xs)
where
insert :: Int -> [Int] -> [Int]
insert a [] = []
insert a (b:c) | a < b = a:b:c
| otherwise = b : insert a c
Run Code Online (Sandbox Code Playgroud)
当我尝试将我的函数文件加载到ghci时,我收到错误:
Couldn't match type ‘a’ with ‘Int’
‘a’ is a rigid type variable bound by
the type signature for isort :: Ord a => [a] -> [a]
at LabSheet2.hs:17:10
Expected type: [a]
Actual type: [Int]
...
Run Code Online (Sandbox Code Playgroud)
这Ord a是一个类型类约束,表明你的函数适用于任何类型a,只要a是可比较的(Ord可用的).你得到的错误信息是由于你的外部声明之间的冲突,它说它适用于任何人Ord a => a,而内部insert"只"适用于Int.
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |