2011-12-21 48 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 [] = []