csn*_*ate 4 sorting mergesort haskell
我正在学习Haskell,我无法理解这个功能.我正在实施mergesort.我实现了mergesort递归函数,但我不明白这个'merge'函数在做什么.我理解命令式语言中的合并排序,但我不明白这里的语法.
merge [] ys = ys
merge xs [] = xs
merge xs@(x:xt) ys@(y:yt) | x <= y = x : merge xt ys
| otherwise = y : merge xs yt
Run Code Online (Sandbox Code Playgroud)
Joh*_*son 12
merge [] ys = ys
Run Code Online (Sandbox Code Playgroud)
如果第一个参数为空,则给出第二个参数.
merge xs [] = xs
Run Code Online (Sandbox Code Playgroud)
如果第二个参数为空,则给出第一个参数.
merge xs@(x:xt) ys@(y:yt) | x <= y = x : merge xt ys
| otherwise = y : merge xs yt
Run Code Online (Sandbox Code Playgroud)
如果x小于或等于y,则cons(加到前面)x到合并剩余的xs(是xt)的结果ys.否则y是较小的,因此将xs与其余部分ys(即yt)合并.
xs@(x:xt)是使用"占位符"的参数解构.结果是xs将引用整个第一个参数,而x头部xt是尾部.
由于合并是递归定义的,因此它将继续使用xs和ys中的元素,直到至少有一个为空,然后简单地返回它.
条形(|)表示"警卫",它允许您以简洁明了的方式定义条件.