我觉得打字有点烦
(+) 0 a = a
(+) a 0 = a
(*) 0 _ = 0
(*) _ 0 = 0
-- etc.
以下或多或少是我想要做的
f [] a = a
f a [] = a
f (1:1:as) (1:1:1:bs) = [0,0] ++ (f as (0:bs))
f (1:1:1:as) (1:1:bs) = [0,0] ++ (f (0:as) bs)
有没有办法声明一个函数是可交换的?如,有没有办法声明只要任何参数是特定值,那么结果应该是某某?
我想对于编译器编写者来说,定义这样的行为一定非常困难,但我已经多次对 haskell 感到惊讶。
编辑:
感谢我的评论
f [] a = a
--f a [] = a
f (1:1:as) (1:1:1:bs) = [0,0] ++ (f as (0:bs))
--f (1:1:1:as) (1:1:bs) = [0,0] ++ (f (0:as) bs)
f a b = f b a
虽然我想它的性能一定会差一点,因为它必须检查所有模式,然后翻转然后再次检查。