亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有什么區別。(點)和$(美元符號)?

有什么區別。(點)和$(美元符號)?

有什么區別。(點)和$(美元符號)?點之間的區別是什么?(.)美元符號($)?。據我所知,它們都是不需要使用括號的語法糖。
查看完整描述

3 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

這個$運算符用于避免括號。在它之后出現的任何東西都將優先于任何之前出現的東西。

例如,假設您有一行內容如下:

putStrLn (show (1 + 1))

如果您想去掉這些括號,下面的任何一行也會執行相同的操作:

putStrLn (show $ 1 + 1)putStrLn $ show (1 + 1)putStrLn $ show $ 1 + 1

的主要目的.運算符不是為了避免括號,而是為了鏈式函數。它允許您將顯示在右側的任何內容的輸出與顯示在左側的任何內容的輸入相關聯。這通常也導致較少的括號,但工作方式不同。

回到同一個例子:

putStrLn (show (1 + 1))
  1. (1 + 1)

    沒有輸入,因此不能與

    .

    接線員。
  2. show

    可以

    Int

    并返回一個

    String.

  3. putStrLn

    可以

    String

    并返回一個

    IO ().

你可以鎖鏈showputStrLn就像這樣:

(putStrLn . show) (1 + 1)

如果你喜歡的括號太多了,用$操作員:

putStrLn . show $ 1 + 1


查看完整回答
反對 回復 2019-06-24
?
胡子哥哥

TA貢獻1825條經驗 獲得超6個贊

它們有不同的類型和不同的定義:

infixr 9 .(.) :: (b -> c) -> (a -> b) -> (a -> c)(f . g) x = f (g x)infixr 0 $($) :: (a -> b) -> a -> b
f $ x = f x

($)用于替換正常的函數應用程序,但以不同的優先級來幫助避免括號。(.)是將兩個函數組合在一起,形成一個新函數。

在某些情況下,它們是可互換的,但這在一般情況下是不正確的。典型的例子是:

f $ g $ h $ x

==>

f . g . h $ x

換句話說,在一連串的$S,除了最后一個,所有的都可以用.


查看完整回答
反對 回復 2019-06-24
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

還請注意($)專攻函數類型的標識函數..標識函數如下所示:

id :: a -> a
id x = x

($)看起來是這樣的:

($) :: (a -> b) -> (a -> b)($) = id

注意,我有意在類型簽名中添加了額外的括號。

使用($)通??梢酝ㄟ^添加括號來消除(除非在節中使用運算符)。例如:f $ g xf (g x).

使用(.)通常較難替換;它們通常需要lambda或引入顯式函數參數。例如:

f = g . h

f x = (g . h) x

f x = g (h x)

希望這能幫上忙!


查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 741 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號