gpt4 book ai didi

Haskell - 如何转换 map 总和( map (x :) xss) to map (x+) (map sum xss)

转载 作者:行者123 更新时间:2023-12-04 13:38:45 24 4
gpt4 key购买 nike

阅读“用 Haskell 进行函数式思考”时,我遇到了需要 map sum (map (x:) xss) 的程序计算的一部分。改写为map (x+) (map sum xss)
直觉上我知道这是有道理的......

如果您有一些要求和的列表,但在求和之前,您还要向这些相同的列表添加一个元素“x”,那么这与获取原始列表总和的列表并添加 x 相同对他们每个人的值(value)。

但我想知道如何仅使用等式推理将一个转换为另一个。我觉得我错过了可以帮助我理解的法律或规则。

最佳答案

使用法律

map f (map g list) === map (f . g) list

我们可以推断
map sum (map (x:) xss) =
map (sum . (x:)) xss =

eta-expand 给出一个与之合作的论点
map (\xs -> sum . (x:) $ xs) xss =

代入 (f . g) x === f (g x)
map (\xs -> sum (x:xs)) xs =

在哪里
sum (x:xs) = x + sum xs
sum [] = 0

所以
map (\xs -> sum (x:xs)) xss =
map (\xs -> x + sum xs) xss =

代入 f (g x) === (f . g) x
map (\xs -> (x +) . sum $ xs) xss =

eta-减少 lambda
map ((x +) . sum) xss =

使用上面第一定律的反面
map (x+) (map sum xss)

关于Haskell - 如何转换 map 总和( map (x :) xss) to map (x+) (map sum xss),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27048281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com