簡體   English   中英

在Haskell中需要幫助理解(\\ x - >)

[英]Need help understanding (\x -> ) in Haskell

在ZVON上,為takeWhile函數提供的定義之一是

Input: takeWhile (\x -> 6*x < 100) [1..20]

Output: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]

有人可以解釋一下這個部分(\\x -> 6*x < 100)是什么意思嗎?

它是一個匿名函數定義,也稱為lambda表達式。 (\\x -> 6*x < 100)是一個接受數字的函數,並返回不等式的布爾結果。

由於像Haskell這樣的函數式語言經常將函數作為參數,因此能夠在線定義簡單函數是很方便的,而無需為它們指定名稱。

原來,故事的結局, 邱奇想用,以紀念在函數表達式變量回旋 ,像如(ŷ.x(yz))但普林斯頓印刷機只是無法做到這一點的時候。 然后,他想至少要打印插入符號的增值經銷商之前,像這樣: (^yx(yz))但他們不能這樣做,要么。

下一個最好的選擇是使用希臘字母lambda ,因此他們最終寫作(λy.x(yz))等,因此lambda表達式中的“lambda”。 這只是一個印刷事故。

今天在ASCII終端上我們甚至不能使用字母λ ,因此在Haskell中我們使用反斜杠(而用箭頭代替原始lambda表達式表示法中的點):

(\y -> x (y z))

代表函數g

g y = x (y z)

來源:在某處讀它,不記得在哪里。

(\\x -> 6*x < 100)是一個lambda ,一個匿名函數,它接受一個參數(此處稱為x )並計算並返回6*x < 100 ,即測試該數字乘以6是否小於100 。

它是一個lambda函數,也就是說,你在現場定義的函數主要是為了方便起見。 您將其讀作“將x作為輸入,乘以6,看它是否小於100”。 不過,還有一些其他相關設施。 例如,在Haskell中,Lambda函數和普通函數具有相關的詞法環境,並且正確地說是閉包 ,因此它們可以使用環境作為輸入來執行計算。

暫無
暫無

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

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