簡體   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