2012-03-15 115 views
0

需要關於haskell問題的幫助,這些問題在我的腦海中進行。我知道需要採取的步驟來達到我想要的目標,我真的知道如何去做。Haskell Maybe Int的列表,將每個元素轉換爲char,然後字符串

E.g

說我有Maybe Int的一個名單 - [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]]

我需要創建一個函數。

1)通過每個元件採取Maybe Int小號

[[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3],[Nothing,Nothing, Just 1]] 

2)獲取的第一列表(head的列表)

[Just 2, Nothing, Just 3] 

3)遞歸列表內 - ?(x:xs)

Just 2, Nothing, Just 3 

4)將Maybe Int轉換爲Char - fromEnum

'2', ' ', '3' 

5)返回完整String包含所有字符 - (++) = [char]/String

"2 3" 

6)移動到下一個列表,直到列表= []

[Just 6,Just 3, Just 3] 

所以結束結果會像這樣打印在一個單獨的行上:

"2 3" 
"633" 
"  1" 

我試圖儘可能地解釋它,任何提示/幫助/信息的來源將不勝感激。

+0

只是FYI,你一直說你想操作一個Maybe Ints的列表,但是你的例子每個都有List List List Int。也就是說[[也許是中]] – Sarah 2012-03-15 09:46:29

回答

7

可以使用maybe功能,它允許你將一個函數的值在Just有默認值,如果它是Nothing,所以一個Maybe Int轉換爲個位數Char與空間作爲默認設置,使用maybe ' ' intToDigit 。 (toEnum將使用ASCII值,這不是你想要的)。

然後,要應用列表的列表中,您只需使用兩次map

> import Data.Char 
> map (map $ maybe ' ' intToDigit) [[Just 2, Nothing, Just 3],[Just 6,Just 3, Just 3], [Nothing, Nothing, Just 1]] 
["2 3","633"," 1"] 

因爲一個字符串就是字符列表,結果是字符串列表。

+0

完成後,用非線條打印。所以,整個事情應該是無條件的。地圖(地圖$ maybe''intToDigit)$ [你的列表] – danieltahara 2012-03-15 22:25:31

相關問題