日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Atitit 理解Monad attilax总结

發(fā)布時間:2023/12/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Atitit 理解Monad attilax总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?

?

?

Atitit 理解Monad attilax總結(jié)

?

?

但函數(shù)式編程最大的一個問題是,函數(shù)是一個數(shù)學(xué)抽象,在現(xiàn)實世界中不存在,1

那既然這樣就夠用了,還要 Monad 干嘛?Monad 的作用在這里就體現(xiàn)出來了,它就是個加強的膠水函數(shù)1

?

?

但函數(shù)式編程最大的一個問題是,函數(shù)是一個數(shù)學(xué)抽象,在現(xiàn)實世界中不存在,

它必須被模擬出來。目前為止被廣泛使用的計算機還是基于圖靈機模型,計算機的寄存器、緩存、內(nèi)存就是用來記錄狀態(tài)的。要真正懂得程序設(shè)計,必須知道沒有狀態(tài)的函數(shù)是如何在充滿狀態(tài)的計算機上實現(xiàn)的,所以還是繞不開非函數(shù)式的編程。另外絕大部分的函數(shù)式程序設(shè)計語言都不是純函數(shù)式的,出于實用性考慮都夾雜著其他語言的一些特點,并沒有完全排斥狀態(tài)。Haskell 號稱純函數(shù)式語言,用 Monad 來抽象狀態(tài),理論上可以自圓其說,但在實際使用中其實還是帶來了很多不便(于是又發(fā)明了 Monad Transformer...)。

從某種程度上說,狀態(tài)是繞不過去的,畢竟人感知到的宏觀世界就是由各種各樣有各自狀態(tài)的對象構(gòu)成。函數(shù)式編程可以幫我們避免很多用其他方式容易犯的錯誤,在很多情況下寫出更高質(zhì)量的程序,但并發(fā)帶來的復(fù)雜度并不會從根本上消失。各種編程風(fēng)格一定是互相影響推動程序設(shè)計語言的進化,沒有絕對的好壞,從 C++ 和 Java 最新標準里引入的函數(shù)式方面的功能就很容易看出這一點。比較有意思的是,OOP 最早是在 LISP 里實現(xiàn)的,而 LISP 也被很多人看做函數(shù)式編程的起始。同樣,好的程序員也會根據(jù)具體情況使用合適的編程風(fēng)格。

那既然這樣就夠用了,還要 Monad 干嘛?Monad 的作用在這里就體現(xiàn)出來了,它就是個加強的膠水函數(shù)



因為不方便。函數(shù)式編程的精髓就在于,我們可以用好多好多小小函數(shù),搭搭搭,組成一個個大函數(shù),最終寫出整個程序來。如果所有 IO 都要用上面的模型,我們就要把程序里所有需要 IO 的地方都匯總起來,輸入做成一個大數(shù)據(jù)結(jié)構(gòu),輸出做成一個大數(shù)據(jù)結(jié)構(gòu),然后再往模型上面湊,很麻煩,這不精髓。

理想的情況是這樣:
比如我們想寫一個函數(shù)

a -> c

然后手頭有兩個小函數(shù):

a -> b

b -> c

于是我們用一個膠水函數(shù)

(a -> b) -> (b -> c) -> (a -> c)

把那兩個小函數(shù)膠起來,做成我們要的

a -> c

這樣是墜好的。

Monad 的作用在這里就體現(xiàn)出來了,它就是個加強的膠水函數(shù)。IO Monad 是這些膠水之一,有了它,我們不但可以把小函數(shù)膠起來,還能在膠的同時,把他們的頭連成一個輸入流,把它們的尾巴連成一個輸出流,構(gòu)成最終的 IO 函數(shù),不用吭哧吭哧自己構(gòu)造 IO 數(shù)據(jù)結(jié)構(gòu)。



所以,Monad 膠水除了把兩個小函數(shù)頭尾相接拼起來以外,還可以趁機做些別的事情,起到封裝一部分操作的作用。不同的膠水作用不同,所以要用不同的類(IO、Maybe 等等)把這些膠水區(qū)分開來。然后,

圖解 Monad - 阮一峰的網(wǎng)絡(luò)日志.html

?

作者::?綽號:老哇的爪子claw?of Eagle?偶像破壞者Iconoclast?image-smasher

簡稱?Attilax?Akbar?阿提拉克斯?阿克巴

全名:Attilax?bin Mahmud?bin ?attila bin Solomon?Akbar?Al?Rapanui?

阿提拉克斯? 馬哈茂德??阿提拉 所羅門?阿克巴?阿爾?拉帕努伊???

常用名艾提拉(艾龍)???EMAIL:1466519819@qq.com

轉(zhuǎn)載請注明來源:attilax的專欄 ??http://www.cnblogs.com/attilax/

--Atiend

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的Atitit 理解Monad attilax总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。