gpt4 book ai didi

haskell - 用否定理解函数组合

转载 作者:行者123 更新时间:2023-12-02 02:50:28 24 4
gpt4 key购买 nike

阅读来自 an awesome site 的高阶函数页面后我仍然无法理解与函数组合配对的否定函数。

更具体地说,拿这段代码:

ghci> map (negate . sum . tail) [[1..5],[3..6],[1..7]]

产生:
[-14,-15,-27] 

我再次重新阅读了该页面,但老实说,我仍然不知道那行代码是如何产生这个答案的,如果有人能引导我完成这个过程,我将非常感激!

最佳答案

map f [a,b,c] = [f a,  f b,  f c]

因为 map f (x:xs) = f x:map f xs - 申请 f到列表的每个元素。

所以
map (negate.sum.tail) [[1..5],[3..6],[1..7]]
= [(negate.sum.tail) [1..5], (negate.sum.tail) [3..6], (negate.sum.tail) [1..7]]

现在
(negate . sum . tail) [1..5]
= negate (sum (tail [1,2,3,4,5]))
= negate (sum [2,3,4,5])
= negate 14
= -14

因为 (f.g) x = f (g x).是右结合的,所以 (negate.sum.tail) xs = (negate.(sum.tail)) xs依次是 negate ((sum.tail) xs) = negate (sum (tail xs)) .
tail为您提供除列表第一个元素之外的所有内容: tail (x:xs) = xs ,例如 tail "Hello" = "ello" sum按照您的预期将它们相加,并且 negate x = -x .

其他的工作方式类似,给出减去每个列表尾部的总和。

关于haskell - 用否定理解函数组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17327742/

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