我觉得打字有点烦人
(+) 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
虽然我认为它的性能一定会更差一些,因为它必须检查所有模式,然后翻转,然后再次检查。
最佳答案
感谢我想出的办法的评论
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
虽然我认为它的性能一定会更差一些,因为它必须检查所有模式,然后翻转,然后再次检查。
关于haskell - 可交换模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26564705/