在Haskell中使用匿名函数

时间:2018-10-30 23:55:25

标签: haskell closures anonymous-function

我正在阅读使用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代码如何工作?

1 个答案:

答案 0 :(得分: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