小编ete*_*ent的帖子

哈斯克尔:头。在线性时间内合并排序(对于最小元素)?

在 HaskellWiki https://wiki.haskell.org/Performance/Laziness中,他们将合并排序函数引入为非惰性函数

merge_sort []  = []
merge_sort [x] = [x]
merge_sort lst = let (e,o) = cleave lst 
              in merge (merge_sort e) (merge_sort o) where
 merge :: (Ord a) => [a] -> [a] -> [a]
 merge xs [] = xs
 merge [] ys = ys
 merge xs@(x:t) ys@(y:u)
     | x <= y    = x : merge t ys
     | otherwise = y : merge xs u
Run Code Online (Sandbox Code Playgroud)

因为你首先必须递归地分割列表

 cleave = cleave' ([],[]) where
 cleave' (eacc,oacc) [] = (eacc,oacc)
 cleave' …
Run Code Online (Sandbox Code Playgroud)

sorting mergesort haskell lazy-evaluation

4
推荐指数
1
解决办法
385
查看次数

Haskell - 作为内置类型的元组和列表:它们是如何实际声明的?

在"对Haskell的温和介绍"的第2章中,解释了用户定义的类型,然后认为内置类型除了特殊语法之外,与用户定义的类型没有什么不同:

之前我们介绍了几种"内置"类型,如列表,元组,整数和字符.我们还展示了如何定义新的用户定义类型.除了特殊的语法之外,内置类型是否比用户定义的类型更特殊?答案是不.(特殊语法是为了方便和与历史惯例保持一致,但没有语义后果.)

所以你可以定义一个类似于以下内容的元组:

 data (a,b)              = (a,b)                         
 data (a,b,c)            = (a,b,c)
 data (a,b,c,d)          = (a,b,c,d)
Run Code Online (Sandbox Code Playgroud)

哪个肯定你不能,因为那将需要无限数量的声明.那么这些类型实际上是如何实现的?特别是关于只能针对类型声明进行模式匹配的事实?

haskell tuples list typing

0
推荐指数
1
解决办法
117
查看次数

标签 统计

haskell ×2

lazy-evaluation ×1

list ×1

mergesort ×1

sorting ×1

tuples ×1

typing ×1