【问题标题】:Haskell List in list列表中的 Haskell 列表
【发布时间】:2021-08-06 03:10:44
【问题描述】:

您好,如何在 Haskell 用户列表中生成这样的问题:

list = [("Frank",24,[wall, door],1),("Ann",45,[window],0),
("Claudia",44,[window, bed],2), ("Pedro"77,[wall],1)]

我试过这种方法,但它不起作用:

type Home = (Homename)
type Homename = String
type Person = (Name, Age, [Home], Num)
type Name = String
type Age = Integer
type Num = Integer
list :: [Person]
list = [("Frank",24,[wall, door],1),("Ann",45,[window],0),
("Claudia",44,[window, bed],2), ("Pedro",77,[wall],1)]

error: 表达式中的语法错误(意外的 `;',可能是由于布局错误)

【问题讨论】:

  • 您发布的代码中没有;。你确定这是产生该错误的代码吗?
  • 是的,代码不知道他为什么说“;”
  • 无法复制。请发帖minimal reproducible example
  • 尽量让问题更清楚,因为它不是很具有描述性
  • 如果您使用的是古老的 Haskell 编译器,则可能会出现 ; 错误(请告诉我,您没有从 1998 年开始运行“Hugs”:-))因为以 ("Claudia",44..... 开头的行应该比上一行缩进更多。由于它与上一行一样缩进,因此它实际上开始了一个新定义,“好像; 分隔符在这些行之间”。现代 GHC 没有提及隐含的 ;,因为这很令人困惑。

标签: list haskell types


【解决方案1】:

字符串必须在“字符串”中。 此外,您不能将类型命名为 Num ,它已经是 Prelude

中的保留字

您可以将其重命名为 Numb

type Home = (Homename)
type Homename = String
type Person = (Name, Age, [Home], Numb)
type Name = String
type Age = Integer
type Numb = Integer
list :: [Person]
list = [("Frank"  ,24,["wall", "door"],1),
        ("Ann"    ,45,["window"],0),
        ("Claudia",44,["window", "bed"],2),
        ("Pedro"  ,77,["wall"],1)]

您还需要使函数的主体在所有行的标题之后开始。

这会给你一个错误,因为第二行从位置 0 开始作为标题。

list :: [Person]
list = [("Frank"  ,24,["wall", "door"],1),
("Ann"    ,45,["window"],0),
("Claudia",44,["window", "bed"],2),
("Pedro"  ,77,["wall"],1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多