[英]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.