在Haskell中解释这个'Merge'函数

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中的元素,直到至少有一个为空,然后简单地返回它.

条形(|)表示"警卫",它允许您以简洁明了的方式定义条件.