【问题标题】:haskell using list type function [closed]haskell 使用列表类型函数 [关闭]
【发布时间】:2018-02-09 20:46:19
【问题描述】:

您好,我正在尝试在 haskell 中使用列表类型。

我的 .hs 文件中有以下类型:

type Name = String
type PhoneNumber = Int
type Person = (Name, PhoneNumber)
type PhoneBook = [Person]

我正在寻找添加功能

add::Person -> PhoneBook -> PhoneBook
add ........ 

在列表开头的电话簿中添加一个条目。测试将通过终端完成

【问题讨论】:

  • 你有什么问题?这是相当广泛的。您只是在问如何添加到列表中吗?
  • 这也很简单(add = (:)),除非您想避免添加重复条目。
  • 我正在寻找一个函数,它几乎可以将输入的每个电话簿添加到列表的开头。

标签: list haskell types add


【解决方案1】:

这就是 cons 运算符(:)

add :: Person -> PhoneBook -> PhoneBook
add = (:)

但是我认为你在Person 中滥用了元组。在大多数情况下,您应该考虑使用自定义数据类型而不是元组。使用记录语法让您的生活变得轻松:

data Person = Person { getName        :: Name
                     , getPhoneNumber :: PhoneNumber }

【讨论】:

  • 次要:元组一种产品类型,如果要将PhoneBook视为与lookup :: a -> [(a,b)] -> Maybe b等函数一起使用的关联列表,则这是必需的。跨度>
  • @chepner 那么我该如何更好地定义它呢? “您应该使用 explicit 产品类型”等?
  • @ronevans 我想你可以弄清楚——自己尝试一些东西,然后问你是否经过一些努力后想不出答案。
  • 我将其称为自定义数据类型。但是,在这种情况下,我认为一个简单的元组是正确的选择,至少在某种意义上,PhoneBook 是名称到数字的映射,而不是人的集合。
  • @AdamSmith 我明白你的意思谢谢。如果我想查看电话簿的条目列表怎么办?所以我实际上可以使用“添加”功能添加一个条目。像 E.g.添加 a b = ... 其中 a b 从终端输入姓名和电话号码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多