2011-12-21 16 views
3

當用戶輸入數字m = 0時,程序將永不停止計數。有沒有辦法如何照顧呢?所以如果用戶輸入0,程序將結束。如果輸入= 0,Haskell程序將不會結束

import Control.Monad (replicateM) 

transpose :: [[a]]->[[a]] 
transpose ([]:_) = [] 
transpose x = (map head x) : transpose (map tail x) 
. 
. 
. 
+3

您沒有定義自己的換位功能。只需導入Data.List(轉置) – 2011-12-21 17:26:58

回答

4

你錯過了通過輸入0觸發轉置的情況下:

transpose :: [[a]]->[[a]] 
transpose [] = [] 
transpose ([]:_) = [] 
transpose x = (map head x) : transpose (map tail x) 

而且上面是相當危險的,因爲「頭」和「尾」可能會失敗:

transpose [[0],[]] 

[0,*異常:Prelude.head:空單

2

你的T對於以空列表[]表示的空矩陣,傳遞函數不起作用。

第一個方程,

transpose ([]:_) = [] 

僅處理具有至少一個空行空矩陣。

第二種情況將無限遞歸的空單:

transpose [] = [] : transpose [] 

所以,僅僅增加一個方程,一般transpose x式前:

transpose [] = []