簡體   English   中英

Haskell映射函數和lambda表達式

[英]Haskell map functions and lambda expressions

我在Haskell中有這個表達式,現在我不明白它是如何應用的。 輸入j返回[2,3,4]

j :: [Int]
j = map (\a -> a 1) (map (\a x -> x + a) [1,2,3])

這里有兩個地圖,讓我們先分析子表達式:

map (\a x -> x + a) [1,2,3]

我們可以用一種形式編寫lambda表達式,這種形式可能更適合上述情況:

map (\a -> (\x -> x + a)) [1,2,3]

所以這是一個帶參數a並返回函數的函數。 因此它將返回一個函數,該函數采用映射到x + a的參數x 因此,這意味着第二個map生成一個函數列表 的確,所以上面的表達式相當於:

[(+1), (+2), (+3)]

或者更詳細:

[\x -> x+1, \x -> x+2, \x -> x+3]

這里lambda表達式中的x s是不同的變量。

現在第一個映射采用這些函數,並在調用值為1的函數時映射這些函數,因此,這個表達式:

map (\a -> a 1) [(+1), (+2), (+3)]

相當於:

[(+1) 1, (+2) 1, (+3) 1]

因此相當於:

[2,3,4]

你發現了

我們可以在語法上簡化這個函數:

j :: Num a => [a]
j = map ($ 1) (map (+) [1,2,3])

這在語義上等同於:

j :: Num a => [a]
j = map (+1) [1,2,3]

因此:

j :: Num a => [a]
j = [2,3,4]

暫無
暫無

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

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