簡體   English   中英

函數組合(。)如何在內部工作?

[英]How does function composition (.) work from within?

我正在研究Haskell。 目前,我正在研究功能構成。 我理解(至少在基本層面上)如何使用函數(.) ,但有兩件事我不理解。

所以函數看起來如下:

(.) :: (b -> c) -> (a -> b) -> a -> c
f . g = \x -> f (g x)

首先是類型聲明。 (b -> c) -> (a -> b)實質上意味着函數f從函數g結果值( b )中取一個參數(取值a )並返回類型c值。 我不明白以下部分-> a -> c ,為什么要有-> a那里? 為什么(b -> c) -> (a -> b) -> c錯了? 從我的觀點(這顯然是錯誤的),函數g已經采取a作為參數。

二,功能體f . g = \\x -> f (gx) f . g = \\x -> f (gx) \\x ->在這做什么? Lambda非常簡單。 例如filter (\\(a,b) -> a + b > 4) [(1,2),(3,4)] ,但是簡單的\\x ->讓我卡住了。 我可能會寫這樣的身體f . (gx) = f (gx) f . (gx) = f (gx) (這顯然是錯誤的)。

(b -> c) -> (a -> b) -> c將是一個函數,它接受兩個函數f :: b -> cg :: a -> b ,並以某種方式調用g而沒有初始參數輸入a

對於第二個問題,請考慮如何使用前綴表示法來定義(.) (可能更容易看出我們是否為該函數使用“常規”名稱;我將在每個代碼片段后將其包含為注釋):

(.) f g x = f (g x)    -- compose f g x = f (g x)

x(.)的“第三個參數”,或者更准確地說是(.) fg返回的函數的參數。 這相當於直接將(.) fg定義為函數,方法是在右側放置一個函數,而不是該函數的最終返回值:

(.) f g x =       f (g x)  -- Implicit function def: compose f g x =       f (g x)
(.) f g   = \x -> f (g x)  -- Explicit function def: compose f g   = \x -> f (g x)

您還可以使用括號隱式定義函數:

(f . g) x = f (g x)

暫無
暫無

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

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