第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在Haskell聲明中,感嘆號(hào)是什么意思?

在Haskell聲明中,感嘆號(hào)是什么意思?

當(dāng)我嘗試使用真實(shí)的項(xiàng)目來驅(qū)動(dòng)Haskell時(shí),遇到了以下定義。我不明白每個(gè)論點(diǎn)前面的感嘆號(hào)的含義,而且我的書中似乎都沒有提到它。data MidiMessage = MidiMessage !Int !MidiMessage
查看完整描述

3 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個(gè)贊

這是一個(gè)嚴(yán)格的聲明?;旧?,這意味著在創(chuàng)建數(shù)據(jù)結(jié)構(gòu)值時(shí),必須將其評(píng)估為所謂的“弱頭范式”。讓我們看一個(gè)示例,以便我們可以看到這意味著什么:


data Foo = Foo Int Int !Int !(Maybe Int)


f = Foo (2+2) (3+3) (4+4) (Just (5+5))

f上面的函數(shù)在被求值時(shí)將返回“ thunk”:即,執(zhí)行以確定其值的代碼。到那時(shí),F(xiàn)oo甚至還不存在,僅存在代碼。


但是在某些時(shí)候,可能有人會(huì)嘗試通過模式匹配來查看其中的內(nèi)容:


case f of

     Foo 0 _ _ _ -> "first arg is zero"

     _           -> "first arge is something else"

這將執(zhí)行足夠的代碼來執(zhí)行所需的工作,僅此而已。因此它將創(chuàng)建具有四個(gè)參數(shù)的Foo(因?yàn)槿绻麤]有它,您將無法在其中查看內(nèi)容)。首先,因?yàn)槲覀冋跍y試它,所以我們需要一直評(píng)估到4,直到我們發(fā)現(xiàn)它不匹配。


第二個(gè)不需要評(píng)估,因?yàn)槲覀儧]有測試它。因此,6我們不會(huì)將代碼存儲(chǔ)在該內(nèi)存位置中,而是將其存儲(chǔ)以用于以后的評(píng)估(3+3)。僅當(dāng)有人看時(shí),它就會(huì)變成6。


但是,第三個(gè)參數(shù)!在其前面,因此必須進(jìn)行嚴(yán)格評(píng)估:(4+4)已執(zhí)行并8存儲(chǔ)在該內(nèi)存位置。


第四個(gè)參數(shù)也被嚴(yán)格評(píng)估。但是,這里有些棘手:我們沒有完全評(píng)估,只是評(píng)估了弱勢的正常頭型。這意味著我們要弄清楚是什么Nothing還是Just某種東西,并將其存儲(chǔ)起來,但是我們走得更遠(yuǎn)了。這意味著我們Just 10實(shí)際上不是存儲(chǔ)而是Just (5+5)保留其中的雜物未被評(píng)估。要知道這一點(diǎn)很重要,盡管我認(rèn)為這的所有含義都超出了此問題的范圍。


如果啟用BangPatterns語言擴(kuò)展,則可以用相同的方式注釋函數(shù)參數(shù):


f x !y = x*y

f (1+1) (2+2)會(huì)歸還笨拙的(1+1)*4。


查看完整回答
反對(duì) 回復(fù) 2019-12-09
?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

我相信這是嚴(yán)格的注解。

Haskell是一種純粹且懶惰的函數(shù)式語言,但有時(shí)懶惰的開銷可能過多或浪費(fèi)。因此,為了解決這個(gè)問題,您可以要求編譯器完全評(píng)估函數(shù)的參數(shù),而不是解析亂碼。


查看完整回答
反對(duì) 回復(fù) 2019-12-09
  • 3 回答
  • 0 關(guān)注
  • 1010 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)