如何修复 "Non-exhaustive patterns in function"
How to fix "Non-exhaustive patterns in function"
我想将一个列表作为参数传递给一个函数,该函数将此列表的每个元素乘以 3。我必须使用递归(我知道怎么做)和映射函数(有问题)。
我正在尝试将列表作为参数传递,就像我在其他帖子中看到的那样,但它不起作用。
fun x = 3 * x + 1
mult :: [Int] -> [Int]
mult [a] = map fun [a]
我试过的代码显示:
异常:x:函数 mult
中的非详尽模式
[a]
是一个单例列表——一个只包含一个元素 a
的列表。
因此 map f [a] == [f a]
而您的定义等同于
mult :: [Int] -> [Int]
mult [a] = [fun a]
[a]
等同于 (a : [])
作为表达式(出现在 =
右侧的东西)或模式(在 =
左侧) .
(a : [])
是表示 tail (a : []) == []
的模式。因此,任何带有 non-null 尾巴的列表都将无法匹配该模式。任何空列表也将无法匹配它。
这些是您的代码无法处理的情况。因此 "non-exhaustive pattern handling" 错误。
详尽的 list-matching 模式对是 []
和 (a : as)
。一个用于空列表,另一个用于 non-empty 具有头元素 a
和尾元素 as
.
的列表
解决方案:
fun x = 3 * x + 1
mult :: [Int] -> [Int]
mult (x:xs) = map fun (x:xs)
我想将一个列表作为参数传递给一个函数,该函数将此列表的每个元素乘以 3。我必须使用递归(我知道怎么做)和映射函数(有问题)。
我正在尝试将列表作为参数传递,就像我在其他帖子中看到的那样,但它不起作用。
fun x = 3 * x + 1
mult :: [Int] -> [Int]
mult [a] = map fun [a]
我试过的代码显示: 异常:x:函数 mult
中的非详尽模式[a]
是一个单例列表——一个只包含一个元素 a
的列表。
因此 map f [a] == [f a]
而您的定义等同于
mult :: [Int] -> [Int]
mult [a] = [fun a]
[a]
等同于 (a : [])
作为表达式(出现在 =
右侧的东西)或模式(在 =
左侧) .
(a : [])
是表示 tail (a : []) == []
的模式。因此,任何带有 non-null 尾巴的列表都将无法匹配该模式。任何空列表也将无法匹配它。
这些是您的代码无法处理的情况。因此 "non-exhaustive pattern handling" 错误。
详尽的 list-matching 模式对是 []
和 (a : as)
。一个用于空列表,另一个用于 non-empty 具有头元素 a
和尾元素 as
.
解决方案:
fun x = 3 * x + 1
mult :: [Int] -> [Int]
mult (x:xs) = map fun (x:xs)