递归Haskell

Ura*_*rah 3 haskell functional-programming

我试图实现这样的事情:

mymin (x:[]) = x
mymin (x:y:xs) = mymin ((if x < y then x else y):xs)

mysort [] = []
mysort (x) = mymin x (mysort othervalues)
Run Code Online (Sandbox Code Playgroud)

我知道这段代码是错的,但它只是想法.如何使用返回递归的最小值来连接其余值.输入就像

mysort [7,9,3,7,1,2]

[1,**7,9,3,7,2**]
[1,2,**7,9,3,7**]
[1,2,3,**7,9,7**]
[1,2,3,7,**7,9**]
[1,2,3,7,7,**9**]
[1,2,3,7,7,9]
Run Code Online (Sandbox Code Playgroud)

Sat*_*vik 6

我想你正在尝试实现选择排序.

最好mymin将最小元素与列表的其余元素一起返回.

mymin :: Ord a => [a] -> (a,[a])
mymin [x] = (x,[])
mymin (x:xs) = let (min,rest) = mymin xs
    in if x < min then (x,min:rest) else (min,x:rest)

mysort :: Ord a => [a] -> [a]
mysort [] = []
mysort xs = let (min,rest) = mymin xs
    in min:mysort rest
Run Code Online (Sandbox Code Playgroud)