繁体   English   中英

foldr1的融合法?

[英]Fusion law for foldr1?

对于foldr我们有融合定律 :如果f是严格的, fa = b ,和

f (gxy) = hx (fy)表示所有x, y ,然后是f . foldr ga = foldr hb f . foldr ga = foldr hb

如何为foldr1发现/推导出类似的法则? (它显然甚至不能采用相同的形式 - 考虑双方对[x]采取行动的情况。)

您可以使用自由定理来推导融合定律等语句。 自由生成自由定理这对你foldr1如果输入foldr1或类型(a -> a -> a) -> [a] -> a ,它会自动导出以下语句。

如果f strict和f (pxy) = q (fx) (fy))对于所有xy你有f (foldr1 pz) = foldr1 q (map fz)) 也就是说,与你关于foldr陈述相反,你会在右侧获得一个额外的map f

还要注意, foldr的自由定理比你的融合定律略foldr1 ,因此看起来与foldr1的定律非常相似。 即,对于所有xy g (foldr pzv) = foldr q (gz) (map fv)) g (pxy) = q (fx) (gy))对于所有xy你具有严格函数gf ,然后g (foldr pzv) = foldr q (gz) (map fv))

我不知道是否会有任何令人满意的foldr1 [我认为]它只是被定义为

foldr1 f (x:xs) = foldr f x xs

让我们首先扩展您的上述内容,以便在整个列表中工作,

f (foldr g x xs) = foldr h (f x) xs

对于foldr1,你可以说,

f (foldr1 g xs) = f (foldr g x xs)
= foldr h (f x) xs

为了重新融入foldr1,你可以创建一些虚构的函数,将f映射到左边的元素,结果如下:

f . foldr1 g = foldr1 h (mapfst f) where
    mapfst (x:xs) = f x : xs

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM