gpt4 book ai didi

haskell - 应用仿函数评估对我来说不清楚

转载 作者:行者123 更新时间:2023-12-01 06:56:57 25 4
gpt4 key购买 nike

我目前正在阅读 Learn You a Haskell for Great Good!并且在对某个代码块的评估的解释上磕磕绊绊。我已经多次阅读解释,并且开始怀疑即使是作者是否理解这段代码在做什么。

ghci> (+) <$> (+3) <*> (*100) $ 5
508

applicative functor 将某个上下文中的函数应用于某个上下文中的一个值,以在某个上下文中获得某个结果。我花了几个小时研究这个代码块,并就如何评估这个表达式提出了一些解释,但没有一个是令人满意的。我知道 (5+3)+(5*100) 是 508,但问题出在这个表达式上。有没有人对这段代码有清楚的解释?

最佳答案

它正在为函数使用应用实例。你的代码

(+) <$> (+3) <*> (*100) $ 5

被评估为

( (\a->b->a+b) <$> (\c->c+3) <*> (\d->d*100) ) 5
( (\x -> (\a->b->a+b) ((\c->c+3) x)) <*> (\d->d*100) ) 5
( (\x -> (\a->b->a+b) (x+3)) <*> (\d->d*100) ) 5
( (\x -> b -> (x+3)+b) <*> (\d->d*100) ) 5
( (\x->b->(x+3)+b) <*> (\d->d*100) ) 5
(\y -> ((\x->b->(x+3)+b) y) ((\d->d*100) y)) 5
(\y -> (b->(y+3)+b) (y*100)) 5
(\y -> (y+3)+(y*100)) 5
(5+3)+(5*100)

其中 <$>fmap 或只是函数组合 . ,而 <*>ap 如果您知道它在 monad 上的行为。

关于haskell - 应用仿函数评估对我来说不清楚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54961639/

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