是否可以在haskell中使用参数化定义?

时间:2018-04-26 20:53:32

标签: haskell

有没有办法在haskell中通过大小写紧凑地写入多个定义,而不必重复输入参数以外的完全相同的语法?到目前为止,我能想象到的唯一可能的解决方案是宏观。

下面是定义二进制最大和最小函数的示例。我们可以压缩

max' x y
  | x > y = x
  | otherwise = y

min' x y
  | x < y = x
  | otherwise = y

类似

(max',min') x y
  | x (>,<) y = x
  | otherwise = y

编辑:

我知道这可以让我们对“脾气暴躁的脸”进行参数化,但似乎仍然可以有更简洁的形式。

maxmin x y f
  | f x y = x
  | otherwise = y

max' x y = maxmin x y (>)
min' x y = maxmin x y (<)

1 个答案:

答案 0 :(得分:10)

嗯,你可以随时这样做:

select op x y
    | x `op` y  = x
    | otherwise = y

max' = select (>)
min' = select (<)

即。将公共部分提取到函数中并将差异转换为参数。