【问题标题】:Haskell - Types, Enums, and FunctionsHaskell - 类型、枚举和函数
【发布时间】:2013-05-03 13:22:45
【问题描述】:

大家早上好,

这是我今天的工作,以及我遇到的问题:

--A
data Row = A | B | C | D | E | F | G | H | I | J deriving (Enum, Ord, Show, Bounded, Eq, Read)
data Column = One | Two | Three | Four | Five | Six | Seven | Eight | Nine | Ten  deriving (Enum, Ord, Show, Bounded, Eq, Read)
--B
data Address = Address Row Column deriving (Show, Read, Eq)

几行之后,我找到了问题孩子:

toAddress r c = Address(toEnum r, toEnum c)

我需要为地址提供行和列,但我需要将 r 和 c 转换为行和列(不是整数)

显然 toAddress 的结构不正确,无法执行此任务。要求如下:

写一个函数 toAddress 接受行和列,每个在 [0 - 9]。构造一个地址并返回它。使用 toEnum 索引 您的 Row 和 Column 枚举列表。

有人对如何完成我在这里的目标有任何建议吗?

谢谢!

【问题讨论】:

  • 感谢已经对此投反对票的人。
  • 你试过Address (toEnum r) (toEnum c)吗?
  • 您的解决方案看起来可疑的第一件事是Address(toEnum r, toEnum c)Address 这里是一个构造函数,它就像一个函数。但是您使用的语法与 Haskell 中函数应用程序的语法完全不同。
  • 空格使它更具可读性。这不仅仅是一个建议。这就是 Haskell 的工作方式。忘掉你对命令式语言的了解(C、C++、Java,无论你以前用过什么)。
  • 是的,那个空间。在某种程度上,Address 也是一个函数。

标签: function haskell types enums


【解决方案1】:

你的语法错误。

函数f :: A -> B -> C 在haskell 中的函数应用看起来像这样f a b 而不是f(a,b)f(a,b) 仍然是正确的语法,但不是您想要的:它只将一个参数传递给函数(即由 a 和 b 组成的元组)。

所以toAddress 的正确实现如下所示:

toAddress r c = Address (toEnum r) (toEnum c)

【讨论】:

  • 谢谢您,先生,非常感谢您的帮助! Haskell 对我来说是新的,到目前为止我已经完成了大部分命令式编程。新的心态,但我真的很喜欢。
猜你喜欢
  • 1970-01-01
  • 2014-01-16
  • 2021-09-23
  • 2014-06-22
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多