我目前正在嘗試撰寫一個需要連接兩個串列的代碼。但我想將此結果存盤到第一個串列中(就像 C 中的 strcat() 一樣)。有沒有辦法做到這一點?
uj5u.com熱心網友回復:
是的,可以做你想做的事。您需要創建一個可變變數,例如狀態變數,或者使用 STM,并將值存盤在其中。
但是,這不是一個好主意。一方面,它很復雜。但更重要的是,到目前為止,最好接受 Haskell 的一般設計作為不可變語言,并且僅在絕對需要時使用可變資料。
術語“不可變”意味著一旦分配了變數,它就不會再次更改。不可變變數,更準確地稱為values,有一些重要的好處。某些語言(如 F# 和 Rust)具有默認不可變的變數,如果您希望它是可變的,則必須指定該變數是可變的。Haskell 只是更進一步。
Haskell 版本strcat如下所示:
strcat :: String -> String -> String
strcat s1 s2 = s1 s2
s1和的值s2在頂部出現,連接的值在底部出現,但僅作為其他函式的輸入。沒有存盤任何內容。Haskell 中的函式最好被認為是讓資料流過它們。
每種語言都有自己的習語,當你使用這種語言時,如果你堅持這些習語,事情就會變得更容易。對于像 C 或 Python 這樣的語言來說,Haskell 也是如此。
uj5u.com熱心網友回復:
這是不可能的,因為在 Haskell 中所有的值都是不可變的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517128.html
