我想编写一个函数,按照正确的顺序将一个项目添加到列表中,在1
中说[2, 3]
。我是haskell的新手,如果不使用Ord
就需要帮助。
答案 0 :(得分:2)
答案 1 :(得分:1)
编写将元素插入到排序列表中的函数并不难。它看起来像这样:
insert :: Ord a => a -> [a] -> [a]
insert x [] = [x]
insert x (y:ys)
| x > y = y : insert x ys
| otherwise = x : y : ys
但是,这对您的用例来说不太可能有效。列表的问题在于,您最终会因此类插入问题而反复创建大部分脊椎的新副本。您还必须在列表中线性扫描,直到找到正确的位置,这不是搜索正确位置的最快方法。
使用Data.Set或Data.IntSet中的数据结构可能会更好。这些通常是O(log n)用于插入,因为它们使用树或其他数据结构,允许比列表更多共享,并快速找到正确的位置。