Bar*_*rka -1 haskell pattern-matching non-exhaustive-patterns
我想将一个列表作为参数传递给一个函数,该函数将该列表的每个元素乘以3。我必须使用递归(我知道该怎么做)和map函数(有问题)。
我正在尝试将列表作为参数传递,就像我在其他帖子中看到的那样,但是它不起作用。
fun x = 3 * x + 1
mult :: [Int] -> [Int]
mult [a] = map fun [a]
Run Code Online (Sandbox Code Playgroud)
我尝试的代码显示:异常:x:函数mult中的非穷举模式
[a]是一个单例列表-仅包含一个元素的列表a。
这样map f [a] == [f a],您的定义等同于
mult :: [Int] -> [Int]
mult [a] = [fun a]
Run Code Online (Sandbox Code Playgroud)
[a]等同于(a : [])既是表达式(在右侧出现的内容=),还是模式(在左侧=)的形式。
(a : [])是表达这种方式的模式tail (a : []) == []。因此,任何带有非空尾的列表都将不匹配该模式。任何空列表也将无法与其匹配。
这些是您的代码无法处理的情况。因此,出现“非穷尽模式处理”错误。
列表匹配模式的详尽对是[]和(a : as)。一个用于空列表,另一个用于带有head元素a和tail的非空列表as。