Haskell 的四則運算符

Haskell 的四則運算符可以寫成 curry形式冒签,做不全調(diào)用:

比如 + * / - 四個運算,調(diào)用時候需要加括號

Prelude> (+) 2 3
5

(2+) 表示一個函數(shù)將調(diào)用的參數(shù)加上2

Prelude> (2+) 3
5

乘法和加法完全一樣兰怠。

除法稍微不一樣,(/) 表示用 第一個參數(shù)除以第二個參數(shù)肤寝。

Prelude> (/) 6 3
2.0

(6/)為不全調(diào)用旋廷,返回一個函數(shù),該函數(shù)將用6來除以調(diào)用的參數(shù)得到結(jié)果狈网。

Prelude> (6/) 3
2.0

(/6)為不全調(diào)用,返回一個函數(shù)笨腥,該函數(shù)將調(diào)用的參數(shù)除以6拓哺,即相當(dāng)于除法函數(shù)缺了第一個參數(shù)調(diào)用。

Prelude> (/6) 3
0.5

減號函數(shù)調(diào)用的順序依然和前面一樣脖母,用3來減去2.

Prelude> (-) 3 2
1

(3-)為不全調(diào)用士鸥,返回一個函數(shù),該函數(shù)將3減去調(diào)用的參數(shù)得到結(jié)果谆级。

Prelude> (3-) 2
1

因為減號 (-) 同時也是負(fù)號烤礁,所以,如果要得到一個函數(shù)把參數(shù)減去3肥照,怎么辦脚仔?仿照除法寫成 (-3) 肯定不行,因為-3就是一個數(shù)舆绎,不是一個函數(shù)鲤脏,所以得加括號,讓減號(-)成為函數(shù):

Prelude> ((-) 3) 2
1

很明顯,這個結(jié)果是 用 3-2 得到的猎醇,而不是我們期望的 2-3

其實 (3-) == ((-) 3) 這兩個函數(shù)是等價的窥突,因為 (-) 3 相當(dāng)于減號(-)函數(shù)的不全調(diào)用,再補全一個參數(shù)硫嘶,就相當(dāng)于 (-) 3 2 這樣的調(diào)用阻问,也即等價于: 3 - 2

所以要得到參數(shù)減3函數(shù)這樣做不行,一種辦法可以用flip函數(shù)來變換參數(shù)的位置:

Prelude> (flip (-) 3) 2
-1

還可以用Haskell提供的另外一個函數(shù) subtract :

Prelude> (subtract 3) 2
-1

subtract函數(shù)和減號不同沦疾,subtract 是用第二個參數(shù)減去第一個參數(shù)称近,和 減號(-) 剛好相反。比如上面的曹鸠,(subtract n) 就剛好返回我們需要的函數(shù):將調(diào)用的參數(shù)減去 n 煌茬。

但如果寫成下面這樣:

Prelude> (`subtract` 3) 2
1

用中綴來調(diào)用,則得到和 ((-) 3) 或者說 (3-) 等價的函數(shù)彻桃,因為subtract是用第二個參數(shù)減第一個參數(shù)坛善,所以:3 \subtract` 2得到的結(jié)果應(yīng)該為 2-3,而(`subtract` 3)` 缺了第一個參數(shù)邻眷。

Prelude> (3 `subtract`) 2
-1

如果寫成上面這樣眠屎,就相當(dāng)于缺了第二個參數(shù)調(diào)用,因為subtract函數(shù)是第二個參數(shù)減去第一個參數(shù)的肆饶,所以不應(yīng)該寫成中綴調(diào)用改衩,這樣徒增復(fù)雜度,而沒任何幫助驯镊,所以大部分情況下用不到這個subtract函數(shù)葫督,但做不全調(diào)用時候,可以用來生成讓參數(shù)減去n的函數(shù)即 (subtract n)板惑。

如果要寫減去3的函數(shù)橄镜,其實可以轉(zhuǎn)換成 (+ (-3))這樣就可以了

Prelude> map (+ (-3)) [1..3]
[-2,-1,0]

或者可以簡寫成: -3+ 這樣就省略一個括號

Prelude> map (-3+) [1..3]
[-2,-1,0]

查詢一下加號和減號的類型:

Prelude> :type (+)
(+) :: Num a => a -> a -> a

Prelude> :type (-)
(-) :: Num a => a -> a -> a

可以看到,雖然減號(-)同時也是一個一元運算符冯乘,但查詢到的結(jié)果其實是減法的函數(shù)洽胶,Haskell還有另外一個函數(shù):negate 用來把一個數(shù)取負(fù)數(shù):

Prelude> negate 3
-3
Prelude> negate (-3)
3
Prelude> :type negate
negate :: Num a => a -> a

這樣就減號一元運算符的狀態(tài)了,其實根本沒有什么運算符裆馒,函數(shù)式語言嗎姊氓?一切都是函數(shù)而已。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喷好,一起剝皮案震驚了整個濱河市翔横,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梗搅,老刑警劉巖棕孙,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡蟀俊,警方通過查閱死者的電腦和手機钦铺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肢预,“玉大人矛洞,你說我怎么就攤上這事√逃常” “怎么了沼本?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锭沟。 經(jīng)常有香客問我抽兆,道長,這世上最難降的妖魔是什么族淮? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任辫红,我火速辦了婚禮,結(jié)果婚禮上祝辣,老公的妹妹穿的比我還像新娘贴妻。我一直安慰自己,他們只是感情好蝙斜,可當(dāng)我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布名惩。 她就那樣靜靜地躺著,像睡著了一般孕荠。 火紅的嫁衣襯著肌膚如雪娩鹉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天稚伍,我揣著相機與錄音弯予,去河邊找鬼。 笑死槐瑞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阁苞。 我是一名探鬼主播困檩,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼那槽!你這毒婦竟也來了悼沿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤骚灸,失蹤者是張志新(化名)和其女友劉穎糟趾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡义郑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年蝶柿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片非驮。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡交汤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出劫笙,到底是詐尸還是另有隱情芙扎,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布填大,位于F島的核電站戒洼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏允华。R本人自食惡果不足惜圈浇,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望例获。 院中可真熱鬧汉额,春花似錦、人聲如沸榨汤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽收壕。三九已至妓灌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜜宪,已是汗流浹背虫埂。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留圃验,地道東北人掉伏。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像澳窑,于是被迫代替她去往敵國和親斧散。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容