4

我觉得打字有点烦

(+) 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

虽然我想它的性能一定会差一点,因为它必须检查所有模式,然后翻转然后再次检查。

4

1 回答 1

0

感谢我的评论

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

虽然我想它的性能一定会差一点,因为它必须检查所有模式,然后翻转然后再次检查。

于 2014-10-26T10:13:12.183 回答