我是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
我不知道为什么会这样发生。请帮助我。
答案 0 :(得分:2)
你用另一个函数覆盖了你的第一个函数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