簡體   English   中英

有關兩個haskell符號及其作用的問題:$和\\

[英]Question about the two haskell symbols and what they do: $ and \

有人可以用簡單的話向我解釋這兩個運算符的作用嗎:

$

\

\\不是運算符,它是文字語法的一部分。 更准確地說,它是兩種文字語法的一部分:它表示lambda文字,並且用作字符串文字中的轉義字符。

運算符$在前言中定義為

($) :: (a -> b) -> a -> b
f $ x = f x

換句話說,它執行與空白完全相同的操作,即僅執行普通功能應用程序。 但是 ,盡管函數應用程序是左關聯的並且具有較高的優先級(實際上是最高的),但是$是右關聯的並且具有較低的優先級。

這樣,當您有類似“ f應用於g應用於g應用於h應用於x ”之類的鏈時,您可以省略括號,如果沒有$運算符,其寫為

f (g (h x))

但是用運算符可以寫成

f $ g $ h x

如果要將函數應用程序運算符本身作為參數傳遞給另一個函數,這也很有用。 假設您有一個函數列表和一個值列表,並且想要將該列表中的每個函數應用於另一個列表中的相應值:

zipWith ($) fs xs

這兩個運算符的作用:

第一個($)是運算符,定義為:

-- | Application operator.  This operator is redundant, since ordinary
-- application @(f x)@ means the same as @(f '$' x)@. However, '$' has
-- low, right-associative binding precedence, so it sometimes allows
-- parentheses to be omitted; for example:
--
-- >     f $ g $ h x  =  f (g (h x))
--
-- It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,
-- or @'Data.List.zipWith' ('$') fs xs@.

($)                     :: (a -> b) -> a -> b
f $ x                   =  f x

它允許您編寫帶有較少括號的函數。

第二個標記\\Lambda抽象 (匿名函數)的Haskell語法的一部分。

所以,例如

\x -> x + 1

是一個將其參數加1的函數。 Lambda抽象的語法在Haskell報告中進行了描述

($)::(a-> b)-> a-> b base Prelude,基本Data.Function應用程序運算符。 該運算符是多余的,因為普通應用程序(fx)的含義與(f $ x)相同。 但是,$具有較低的右關聯綁定優先級,因此有時可以省略括號。

關鍵字\\反斜杠“ \\”用於多行字符串>“ foo \\> \\ bar”>在lambda函數中>> \\ x-> x + 1

暫無
暫無

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

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