我想教自己Haskell(來自OOP語言)。難以掌握不可變變量的東西。我正在嘗試排列主行中的2d數組。2d數組排序在Haskell
在java中,例如(僞):
int array[3][3] = **initialize array here
for(i = 0; i<3; i++)
for(j = 0; j<3; j++)
if(array[i][j] < current_low)
current_low = array[i][j]
我如何能實現在Haskell這個同樣的事情?如果我創建一個臨時數組以便在每次迭代之後添加低值,我將無法添加它,因爲它是不可變的,正確的?另外,Haskell沒有循環,對吧?
這是我知道在Haskell一些有用的東西:
main = do
let a = [[10,4],[6,10],[5,2]] --assign random numbers
print (a !! 0 !! 1) --will print a[0][1] in java notation
--How can we loop through the values?
* Wince *。只是想明確指出從'[]'文字出來的數據結構是一個鏈表,而不是連續的內存塊。它不適合數字工作,但適合於教你自己Haskell如何替換循環。我很想知道聰明的FP人在回答這個問題時想出了什麼,但高效的數組排序是FP風格並不令人印象深刻的任務之一。 (好吧,我們拭目以待吧) – masonk
@masonk:高效的數組排序是你從來不想自己做的任務之一**,除了教育目的。所以在這個任務中令人印象深刻的風格是一種風格,它允許您以通用的方式重用庫函數,而不需要太多的樣板。功能性編程非常擅長的一個方面! - 也就是說,確定有些應用程序需要使用陣列進行高效工作。事實上,在功能風格上做得不好。在Haskell中,你通常會側身進入一個'ST'ate monad(本地),在那裏使用一個命令式的算法。 – leftaroundabout
底線是,在許多其他時候,Haskell的正確答案是抽出一個'ST'並開始以指令性風格開始混洗指針或原生值類型。我認爲這對於FP運動在這一點上很吝嗇是不利的。當你向他們展示一種在教語言時無用的假快速排序[1]時,感覺就像是誘餌和切換。當你通過K&R並閱讀他們的快速排序時,你正在閱讀在現實世界中有用的代碼。請在「教育學中的誠信」。 [1] http://augustss.blogspot.com/2007/08/quicksort-in-haskell-quicksort-is.html – masonk