簡體   English   中英

在Haskell中使用匿名函數

[英]Using anonymous functions in Haskell

我正在閱讀《使用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代碼如何工作?

我們可以評估用每個定義的標識符替換其自己的定義的表達式。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM