2014-07-26 42 views
0

用戶必須輸入維度(它是一個四分法矩陣),並且會生成隨機字母。 例:generateMatrix 3如何在haskell中生成字母矩陣

[('a', 'f', 'j'), ('t', 'a', 'b'), ('c', 'y', 'k')] 

每個元組是一條線

+0

我還沒有嘗試過任何事情。因爲我不知道如何做到這一點。 – user3741052

+0

@ user3741052使用[hmatrix](https://hackage.haskell.org/package/hmatrix)庫。 – Sibi

回答

4

實現你要找的是對於初學者不小的任務的隨機性,但假設你知道哈斯克爾的基本知識,LYAH的部分上隨機性應該會幫助你很多。

http://learnyouahaskell.com/input-and-output#randomness

特別是,你可能會發現randomRs功能很有用:

ghci> take 10 $ randomRs ('a','z') (mkStdGen 3) :: [Char] 
"ndkxbvmomg" 

但爲了使用,在成功的應用程序,還有更多你應該知道在Haskell的隨機性和處理與雜質,所以你真的應該閱讀整個部分。

另一件需要注意的問題是[(Char,Char,Char)]和[(Char,Char,Char,Char)]是不同的類型,所以沒有簡單的方法讓一個函數返回列表不同長度的元組取決於輸入大小。對於你在做什麼,你可能想要一個列表清單。

1

如果不手動硬編碼解決方案,使用元組是不可能的,這就是爲什麼最簡單的方法是使用列表列表來表示矩陣,如果維度應該是可變的。

然後,您可以嘗試這樣的事情:

import System.Random 

genMatrix n = format n n (take (n*n) (randomRs ('a','z') (mkStdGen (n*n)))) 
    where 
    format _ 0 _ = [] 
    format n m text = (take n text) : format n (m-1) (drop n text) 

genMatrix獲得的行和列和「隨機」的字符串,然後由format格式化的數量。它只是將列表分成長度爲n的部分,並將它們列入空列表。

例子:

*Main> genMatrix 3 
["nmq","jfj","oih"]