如果input = 0,Haskell程序将不会结束

时间:2011-12-21 16:35:35

标签: haskell

当用户输入数字m = 0时,程序将永远不会停止计数。有什么方法可以解决这个问题吗?因此,如果用户输入0,程序将结束。

import Control.Monad (replicateM)

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

2 个答案:

答案 0 :(得分:4)

你错过了一个由输入0:

触发的转置案例
transpose :: [[a]]->[[a]]
transpose [] = []
transpose ([]:_) = []
transpose x = (map head x) : transpose (map tail x)

以上情况非常危险,因为“头部”和“尾部”可能会失败:

transpose [[0],[]]

[[0, * 异常:Prelude.head:空列表

答案 1 :(得分:2)

您的转置函数不适用于表示为空列表[]的空矩阵。

第一个等式,

transpose ([]:_) = []

只处理至少有一个空行的空矩阵。

第二种情况将无限递归一个空列表:

transpose [] = [] : transpose []

因此,在常规transpose x等式之前再添加一个等式:

transpose [] = []