我一直在阅读七周语言中的七种语言,我正在与Haskell合作。
我正在努力解决这个问题:
编写一个排序,它接受一个列表和一个比较其两个参数的函数,然后返回一个排序列表。
我在网上寻求帮助并找到了解决方案,但由于预期的实际类型错误,我甚至无法运行解决方案。
以下是我一直在尝试的代码:
module Main where
import Data.List
sortList :: (Ord a) => (a -> a -> Ordering) -> [a] -> [a]
sortList comparator list = sortBy comparator list
以下是错误:
*Main> sortList [5,4,2,7,8,1]
<interactive>:1:10:
Couldn't match expected type `a -> a -> Ordering'
with actual type `[t]'
In the first argument of `sortList', namely `[5, 4, 2, 7, ....]'
In the expression: sortList [5, 4, 2, 7, ....]
In an equation for `it': it = sortList [5, 4, 2, ....]
我的想法和尝试:
也许我在调用函数错了?我是Haskell的新手。我也试过做很多搜索。我所能得出的结论是某些类型不匹配的地方。我想对脚本的解释和指导对我很有帮助。
答案 0 :(得分:2)
您的功能签名说:
“sortList是一个函数:”
- 函数(a - &gt; a - &gt; Ordering),它接受两个类型为'a'的元素并返回'Ordering'[这是你的比较器]
- 您传递的项目'a'([a])列表
- 返回项目列表'a'([a])
尝试以这种方式打电话:
sortList compare [3,2,1]
如需更多信息,请点击此处: https://hackage.haskell.org/package/base-4.8.2.0/docs/Data-Ord.html
在这里: http://zvon.org/other/haskell/Outputprelude/compare_f.html
答案 1 :(得分:1)
你正在调用该函数错误,你需要传递一个比较器函数。您只需将列表传递给函数。