函式式程式設計所倡導使用的 不可變資料結構 如何保證效能?

時間 2021-05-11 15:59:02

1樓:StevenGerr

.聯絡資料結構單一的資料結構----聯絡實際國際的實體以及實體間的各種聯絡均用聯絡來表明資料的邏輯結構----二維表從使用者視點,聯絡模型中資料的邏輯結構是一張二維表。 一、工欲善其事,必先利其器這兒介紹幾個學習C言語必備的裝置和書本:

A)開發環境例如turbo C 2.0,這個從前佔據了DOS年代開發程式的大半個江山。可是現在windows年代,用turbo C有感覺不方面,編輯程式起來很吃力,並且拖放,更沒有函式變數主動感應功能,查詢參考資料也不便利。

主張運用Visual C ,這個渠道儘管體積大,可是一旦裝置好了,用起來很便利。B)一本學習教程現在C言語教材數不勝數,引薦咱們運用《C言語程式設計》第二版。此書很合適初學者,並且內容也很精到。

C)使用輔助學習軟體究竟現在是Windows年代了,學習軟體數不勝數,這兒向咱們引薦乙個「整合學習環境(C言語)」,裡面的知識點總結和例程解說都非常好,有好幾千題的題庫測驗環境,包含乙個windows下的trubo C,初學者乃至不必裝其它的編譯器,就可以練習程式設計了。還有乙個「C言語學習體系」軟體,不過感覺僅僅乙個題庫體系,假如你覺得題做的不行,不妨也可以試試。二、葵花寶典學習計算機言語最好的辦法是什麼?

答曰:讀程式。沒錯,讀程式是學習C言語入門最快,也是最好的辦法。

咱們咱們都應該有個體驗——在最初學習windows體系操作或Microsoft words假如操作的過程中,剛開始總是正兒八經地買來教材,結果讀來讀去卻雲裡霧裡,而當咱們將教材丟在一邊,拿起滑鼠重複地試,幾個小時就搞定。包含學習J#,C#等其他言語,在今天的Windows年代,也不再提倡抱著書本逐行啃,而是學習它們的例程。當然,對於沒有學過任何計算機言語的初學者,多少要先閱覽教程,細心領會一切概念,然後不放過這一章中說到的一切例程,細心研讀,直到每一行都理解了,再找幾個程式設計標題,最好是和例程相似的或相同的,自己企圖寫出這段現已讀懂的程式。

假如寫不出來,回過頭來再持續研討例程,想想自己為什麼寫不出來,然後再去寫這段程式,反重複復,直到你手到擒來停止。三、空前絕後寫程式的最高境地其實就是把握各種解決問題的手法(資料結構)和解決問題的辦法(演算法)。是不是寫出底層程式就是程式設計高手呢?

非也,寫底層程式,無非是把握了硬體的結構,何況硬體和硬體還不相同,要給乙個晶元寫驅動程式,無非就是把握這塊晶元的各種暫存器及其組合,然後寫值讀值,僅此而已。這不過是了解一些I/O函式算了。那麼怎樣才算通曉程式設計呢?

怎樣才能通曉程式設計呢?舉個比如:你面前有10個人,找出乙個叫「張三」的人,你該怎麼辦?

榜首種辦法:直接對這10個人問:「誰叫張三」。

第2種辦法:你挨個去問「你是不是張三?」,直到問到的這個人就是張三。

第三種辦法:你去問乙個人「你認不認識張三,指給我看」。不要小看這個問題,你說當然會選榜首種辦法,那麼恭喜你答對了,因為這個辦法最快,效率最高,可是在程式設計中找到解決問題的最優辦法和你用的手法卻是檢測乙個程式設計師程式設計水平的重要標誌,並且是不容易達到的。

方才這個問題相似於資料結構和演算法中的:Map資料結構,窮舉查詢和減半查詢。所以把握好資料結構和一些常用演算法,是空前絕後的必定之路。

2樓:Shisoft

在 Clojure 裡,資料是復用的

也就是說假設你產生了乙個 map,對這個 map

assoc 之後你會得到 2 個 map。這兩個 map 是相互關聯的,在記憶體結構上它們會共用相同的部分,形成乙個樹形結構。即使是 seq 一類扁平的資料結構也是如此。

不會是簡單的複製乙個新的資料。所以 Clojure 的實現高度依賴 GC,因為在很多時候迴圈引用是很常見的事情。

3樓:崎車軩仁

1. 計算機的每一級抽象都有額外開銷。高階抽象是為了降低巨集觀的複雜度,使其維持在合理的範圍內。

在保持介面定義的前提下,能做的只能是儘量減少額外的開銷。函式式抽象必然是有額外的開銷的。

2. 計算機就是乙個善於複製的機器。

綜上,在滿足業務需求的前提下,用部分效能換取較低的複雜度是有必要的。

最後,脫離業務談效能都是耍流氓!

4樓:「已登出」

共享的不可變,可變的不共享。函式式程式設計並不要求你完全用不可變資料。scala的標準庫大部分都是命令式的實現,但是因為這些操作對外不可見,所以它兼顧了函式式以及效能。

5樓:Belleve

既然你都不可變了,那麼我能不能把某些「建立新物件」給優化成「賦值」呢?

然後函式式語言也有 IORef、STRef、TVar 這種東西啊

想要理解函式式程式設計的思想,最好用哪種函式式程式語言入門?

SML虐我千百遍,我待SML如初戀 上學期上了CMU 15150,差一點就拿C了好驚險。SML作為教學用還是很不錯的,因為理論方面比較完善。SML裡有個概念叫totality。有了這個totality可以證明很多theorem。這個是Haskell做不到的 Scheme Standard ML Ha...

為什麼會有函式式程式設計?

Jason Hu 這個問題就是跟問 為什麼會有數學,數學是為了解決什麼問題 是乙個意思。基於lambda calculus的語言比基於TM的語言具有更數學含義。實際上,任一形式邏輯系統都對應一種函式式語言。相反,基於TM的語言自成一系,並無法繼承數學和邏輯系統裡的知識架構。另外,基於TM的程式語義也...

函式式程式設計immutable data是不是本質上效能就差點?

個人認為是的,而且開發起來好像也更加麻煩,如果要更新值,那麼完了還要把原來的 replace 掉,甚至要把所有有關聯的地方都要做一次 update.意義是什麼?就為了乙個所謂的無隱患 copy 如果說的不對,還希望大家指出正確使用方式。 navegador 它不一定就得真正的去 malloc.只要在...