【发布时间】:2022-01-06 04:31:29
【问题描述】:
我正在尝试使用 2 个参数创建一个新的数据结构 BigNumber:带有“+”或“-”的字符以区分正数和负数以及数字的数字列表。并在 2 个函数中使用它:将字符串转换为 BigNumber 的扫描仪和将 BigNumber 转换为字符串的输出。 这是我目前所拥有的:
data BigNumber = Char [Integer]
-- Verifies if the number is positive or negative and returns its correspondent char
scanner_Sign :: Char -> Char
scanner_Sign s = if s == '-' then '-' else '+'
-- Converts string into list of digits (without signal)
scanner_Numbers :: (Char, String) -> [Integer]
scanner_Numbers (sign, s)
| sign == '+' = map (read . (:"")) s :: [Integer]
| sign == '-' = map (read . (:"")) (tail s) :: [Integer]
scanner :: String -> BigNumber
scanner = scanner_Numbers (s, n)
where scanner_Sign (head s)
output :: BigNumber -> String
output (sign, numbers)
| sign == '+' = show numbers
| sign == '-' = - (show numbers)
where (BigNumber (sign, numbers))
扫描仪的两个辅助功能都在工作,但我不知道如何主要使用它们。而且我仍然对输出功能一无所知... 我做错了什么?
【问题讨论】:
-
data BigNumber = Char [Integer]并不像您认为的那样。它定义了一个类型BigNumber,它有一个名为Char的构造函数(与标准类型Char无关),并且该构造函数包装了一个Integers 列表。 -
你的其余代码也很荒谬。我建议首先确保您准确理解每段代码的实际含义以及您期望它的含义。
标签: haskell converters