有没有办法在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 (<)
答案 0 :(得分:10)
嗯,你可以随时这样做:
select op x y
| x `op` y = x
| otherwise = y
max' = select (>)
min' = select (<)
即。将公共部分提取到函数中并将差异转换为参数。