gpt4 book ai didi

haskell - Haskell 中的偏函数应用

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

我刚开始从 this wikibook 开始学习 Haskell我在其中一个练习中遇到了一些麻烦。

具体来说,以下内容并不像我预期的那样工作

parseNumber :: Parser LispVal
parseNumber = (many1 digit) >>= (return $ Number . read)

除非我稍微改变一下

parseNumber :: Parser LispVal
parseNumber = (many1 digit) >>= (\n -> return $ Number . read $ n)

我希望有人能解释为什么 返回 $ Number 。 read 不会计算出我在第二个定义中明确创建的同一个 lambda 函数,因为我认为这正是部分函数计算在点自由样式代码中使用时所做的(显然不是!)

感谢您的帮助,希望这不是另一个初学者的 monad 问题...

最佳答案

这只是$如何关联的问题。从根本上说,$ 只是一个用于少写括号的运算符;这与在表达式末尾添加括号换行是一样的。

使用这个想法,我们可以重写你的第二个例子:

parseNumber = (many1 digit) >>= (\n -> return (Number . read ( n)))

供引用,带括号的原始表达式如下所示:

parseNumber = (many1 digit) >>= (return (Number . read))

所以部分应用的等价物实际上是:

parseNumber = (many1 digit) >>= (\n -> (return (Number . read)) n)

基本上,组合多个 $ 关联与您预期的不同。

关于haskell - Haskell 中的偏函数应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20719397/

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