【发布时间】:2021-12-20 07:31:26
【问题描述】:
haskell 新手。所以我创建的第一个函数 sort_by 使用快速排序对 a 类型的列表进行排序 - 工作正常。
下一个函数 compare 接受一个比较器类型(定义如下)和一个函数并返回一个比较器 - 所以GT、EQ 等。这两个函数我都必须只使用函数定义。现在的问题 - 我应该使用这两个函数来定义一个基于标题的函数,但我不知道我的 compare_By 函数应该如何帮助创建这样的函数?
非常感谢任何帮助。谢谢。
import GHC.Show (Show)
type Comparator a = a -> a -> Ordering
type Tokeniser a = String -> [a]
type Translator a b = a -> Maybe b
data English = E String deriving (Show)
data French = F String deriving (Show)
data German = G String deriving (Show)
sort_by :: Comparator a -> [a] -> [a]
sort_by o as = qs as []
where qs [] as' = as'
qs (a:as) as' = qs les $ a : qs gts as'
where les = [a' | a' <- as, a `o` a' == GT]
gts = [a' | a' <- as, a `o` a' /= GT]
compare_by :: (b -> a) -> Comparator a -> Comparator b
compare_by f o a b = o (f a) (f b)
sort_by_fst :: Comparator a -> [(a,b)] ->[(a,b)]
sort_by_fst f [(a,b)] = ??
【问题讨论】:
-
如果你想把
Comparator a变成Comparator (a,b),你需要把什么类型的函数传给compare_by,你能想到这样的函数吗? -
在不相关的说明中,使用
[(a,b)]作为模式意味着您的函数将仅适用于单元素列表。 -
有mb
标签: haskell functional-programming