有没有办法在haskell中通过大小写紧凑地写入多个定义,而不必重复输入参数以外的完全相同的语法?到目前为止,我能想象的唯一可行解决方案是宏观.
下面是定义二进制最大和最小函数的示例.我们能压缩吗?
max' x y
| x > y = x
| otherwise = y
min' x y
| x < y = x
| otherwise = y
Run Code Online (Sandbox Code Playgroud)
变成类似的东西
(max',min') x y
| x (>,<) y = x
| otherwise = y
Run Code Online (Sandbox Code Playgroud)
?
编辑:
我知道这可以让我们对"脾气暴躁的脸"进行参数化,但似乎仍然可以有更简洁的形式.
maxmin x y f
| f x y = x
| otherwise = y
max' x y = maxmin x y (>)
min' x y = maxmin x y (<)
Run Code Online (Sandbox Code Playgroud)
mel*_*ene 10
好吧,你总能做到这一点:
select op x y
| x `op` y = x
| otherwise = y
max' = select (>)
min' = select (<)
Run Code Online (Sandbox Code Playgroud)
即将公共部分提取到函数中并将差异转换为参数.