haskell - 试图在 Haskell 中的列表前面添加一个元组但收到错误?
问题描述
type Name = String
type PhoneNumber = Int
type Person = (Name, PhoneNumber)
type PhoneBook = [Person]
add :: Person -> PhoneBook -> PhoneBook
add (a,b)
add (a,b) ++ []
我正在尝试在列表前面添加一个条目,但它给了我一个错误
Parse error: module header, import declaration
or top-level declaration expected.
|
30 | add (a,b) : xs
| ^^^^^^^^^^^^^^
我哪里错了?
解决方案
您正在尝试添加一个列表和一个元组。但是++
被定义为将列表添加到列表中,而不是用于将元组添加到列表中。Haskell对类型非常严格,所以它不会让你这样做。
您应该使元组成为一个列表:
add [(a,b)] ++ []
或者,正如 Robin Zigmond 在他们的评论中所建议的那样,使用:
运算符:
add (a,b) : []
不过,您还有另一个问题 - 您的函数定义应该包含一个=
运算符:
add (a,b) [] = [(a,b)]
这就是在 Haskell 中定义函数的方式。在左侧,它告诉 Haskell 输入是什么。在右侧,它告诉 Haskell 应该将它们转换成什么。
您可能想参考Learn You A Haskell : Syntax in Functions以很好地介绍在 Haskell 中定义函数。
推荐阅读
- javascript - Cannot set permissions on newly created channel
- sql - TSQL - 拆分 GUID/UNIQUEIDENTIFIER
- racket - 如何为具有任意数量值的异构列表制定合同?
- gensim - 我的 Doc2Vec 代码经过多次循环/训练,并没有给出好的结果。可能有什么问题?
- react-native - React 原生 h.264 编码视频显示
- java - 如何使用 Java 8 的默认方法在接口中使用 EntityManager 实例?
- git - 如何在重新设置其中一个后使两个 git 分支(具有共同历史)彼此连贯?
- django-rest-framework - DRF - 使用 ManyToManyField 将用户添加到模型
- python - 使用opencv python从表单中检测复选框
- python - 对于 bs4 的 .contents,硒中是否有等价物?