在 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
有一个小错误
我是 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