我已经基于更改图像像素完成了上大学的程序。
但是我不知道如何解决这个问题。
我将三元组列表中的所有像素转换为[String],然后将所有像素更改为Red,但是当我执行程序时,de模式似乎是一个问题,终端上的错误是 “函数toRed中的非穷举模式”
并具有toRed的功能
toRed :: [String] -> [(String, String, String)]
toRed [] = []
toRed (x:y:z:xs) = (x,"0","0") : toRed xs
程序执行并保存outFile,但不要转换所有文件
答案 0 :(得分:5)
您要匹配两种情况:
[]
x:y:z:xs
这留下了两个您不匹配的情况:
[x]
[x, y]
请记住,以上只是案例的 local 描述。由于您的函数是递归的,并且每次重复都会减去三个元素,因此这些情况实际上会转换为“ 长度为3n + 1 的列表”和“ 长度为3n + 2的列表” ”。
在这种情况下,我无法确切告诉您该怎么做,因为我不知道您的问题的性质,但是包括它们可以防止错误。
例如,您可能希望以与对待空列表完全相同的方式对待这两种情况:
toRed :: [String] -> [(String, String, String)]
toRed [] = []
toRed [x] = []
toRed [x, y] = []
toRed (x:y:z:xs) = (x,"0","0") : toRed xs
如果以这种方式处理这些案例对您有意义,那么您可能需要考虑将所有三个“空”案例合并为一个通用案例:
toRed :: [String] -> [(String, String, String)]
toRed (x:y:z:xs) = (x,"0","0") : toRed xs
toRed _ = []