在 Haskell 中实现插入排序功能遇到了一些麻烦

Have some troubles in implementing Insertion Sort function in Haskell

我是 Haskell 语言的初级水平,我试图在 ghci 环境中 Haskell 中实现插入排序功能。

这是我的代码。

prelude> let insert x [] = x:[]

insert :: t1 -> [t] -> [t1]

prelude> let insert x (y:ys) = 
if x < y then x:y:ys else y : insert ys


insert :: Ord a => a -> [a] -> [a]

我试过了

insert 1 []

结果是 [1],效果很好。

我试过了

insert 1 ([2,3]) 

结果是 [1,2,3],仍然很好。

(其实我也不知道为什么要解析第二个参数列表。 但是如果我尝试插入 1 [2,3],它不起作用。)

在此之前它运行良好。但是当我尝试

insert 4 ([1,2,3]) 

事情是这样发生的

[1,2,3*** Exception: <interactive>:165:5-61: Non-exhaustive patterns in function 

我不明白为什么会这样 this.please 帮助我。

您正在用另一个函数覆盖您的第一个函数 let insert x [] = x:[](在您的下一个 let insert ... - 发生这种情况是因为您在 GHCi 中使用了 let ...

相反,您应该创建 .hs 文件并将其加载到 GHCi 中。

所以启动你最喜欢的编辑器并插入这个:

module MyInsertSort where

insert :: Ord a => a -> [a] -> [a]
insert x []     = x:[]
insert x (y:ys) = if x < y then x:y:ys else y : insert x ys

保存(我按MyInsert.hs做的),启动ghci并载入:

λ> :l MyInsert.hs
[1 of 1] Compiling MyInsertSort     ( MyInsert.hs, interpreted )
Ok, modules loaded: MyInsertSort.
λ> insert 4 ([1,2,3])
[1,2,3,4]

λ> insert 1 ([2,3])
[1,2,3]

现在它应该可以工作了:D

备注

你的第二行 insert ys 而不是 insert x ys

有一个小错误