haskell - 如何修复“功能中的非详尽模式”
问题描述
我想将一个列表作为参数传递给一个函数,该函数将该列表的每个元素乘以 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 : []) == []
。因此,任何带有非空尾的列表都将无法匹配该模式。任何空列表也将无法匹配它。
这些是您的代码无法处理的情况。因此出现“非详尽模式处理”错误。
详尽的列表匹配模式对是[]
和(a : as)
。a
一个用于空列表,另一个用于具有 head 元素和 tail的非空列表as
。
推荐阅读
- flutter - FutureBuilder 在 GestureDetector 的 OnTap() 中不起作用
- node.js - 开玩笑的错误 MongoServerError: E11000 duplicate key 错误收集
- visual-studio-code - VS Code 如何将 IntelliSense 添加到嵌入式语言
- wordpress - wordpress媒体库上传pdf并获取url
- javascript - 如何以编程方式平滑滚动多个容器?
- python - pyspark 将 RDD 转换回 DF
- snowflake-cloud-data-platform - 使用分区 ADLS 复制到
- bash - 运行 bash 脚本空行 $'\r' 时出错:找不到命令
- tkinter - Python`Ошибка无效的命令名“.!canvas”`
- ruby-on-rails - 如果条件 image.url.present,我该如何添加?