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

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

(f。)做什么?在Haskell中是什么意思?

(f。)做什么?在Haskell中是什么意思?

神不在的星期二 2019-11-14 09:13:02
我已經看到許多根據模式定義的功能(f .) . g。例如:countWhere = (length .) . filterduplicate  = (concat .) . replicateconcatMap  = (concat .) . map這是什么意思?
查看完整描述

3 回答

?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

這是一個品味問題,但是我發現這種風格令人不愉快。首先,我將描述它的含義,然后,提出一個我更喜歡的替代方法。


你需要知道,(f . g) x = f (g x)和(f ?) x = f ? x任何運營商?。由此我們可以推斷出


countWhere p = ((length .) . filter) p

              = (length .) (filter p)

              = length . filter p

所以


countWhere p xs = length (filter p xs)

我更喜歡使用一個叫做 .:


(.:) :: (r -> z) -> (a -> b -> r) -> a -> b -> z

(f .: g) x y = f (g x y)

然后countWhere = length .: filter。我個人覺得這很清楚。


(.:也Data.Composition可能在其他地方定義。)


查看完整回答
反對 回復 2019-11-14
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

從來沒有提到過,pointpoint風格在任何方面都更具可讀性或更好。我唯一提到“可讀”一詞是與tac示例結合使用的。我同意,人們可以通過無點編程來擺脫困境。mf用無點樣式編寫的函數就是這種形式的典范。但是,從數學的角度研究無點編程風格還是很有趣的,因為它使程序的結構在數學上更易于處理。它可以使您的代碼更短,但是容量有限。

查看完整回答
反對 回復 2019-11-14
  • 3 回答
  • 0 關注
  • 751 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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