提问人:min_2_max 提问时间:10/31/2018 更新时间:10/31/2018 访问量:360
在 Haskell 中使用匿名函数
Using anonymous functions in Haskell
问:
我正在阅读 Get Programming with Haskell,以了解函数式编程。在第 10 课中,作者讨论了使用函数式编程来创建使用闭包的简单对象。到目前为止,本书的主题包括高阶函数、lambda 函数和闭包。
他描述了一些内容:
simpleObject intAttribute= \message -> message intAttribute
simpleObject 返回一个闭包,该闭包在效果中存储 intAttribute。闭包将函数作为参数,并提供 intAttribute 作为参数。例如(我的):
obj = simpleObject 5
doubleIt x = 2 * x
obj doubleIt (returns 10)
我想到目前为止我已经很清楚了。
然后,作者描述了一个类似于以下内容的访问器:
getAttribute y = y (\x -> x)
getAtrribute obj (returns 5)
代码按预期工作,返回捕获的 intAttribute。这就是我迷路的地方。getAttribute 代码是如何工作的?
答:
2赞
chi
10/31/2018
#1
我们可以评估表达式,用它自己的定义替换每个定义的标识符。
getAtrribute obj
= { def. getAttribute }
obj (\x -> x)
= { def. obj. }
simpleObject 5 (\x -> x)
= { def. simpleObject }
(\message -> message 5) (\x -> x)
= { beta reduction }
(\x -> x) 5
= { beta reduction }
5
评论
0赞
min_2_max
11/1/2018
谢谢!评论者 Alec 在上面发布了类似的技术,该技术也澄清了代码。
评论
getAtrribute obj == obj (\x -> x) == (simpleObject 5) (\x -> x) == (\message -> message 5) (\x -> x) == (\x -> x) 5 == 5
($id)
flip ($)