【问题标题】:Haskell concat IntHaskell concat Int
【发布时间】:2015-07-24 00:14:30
【问题描述】:

我在以下练习中遇到问题:

我必须创建一个名为 addDigit 的函数,它接受两个 Int,第二个在 0 和 9 之间,并返回一个 Int,即第一个 Int 后跟第二个。

例子:

输入:addDigit (-123) 4

输出:-1234

我尝试过的如下:

addDigit :: Int -> Int -> Int
addDigit x y = x ++ y

我知道它不起作用,因为 ++ 关键字仅适用于字符串、字符和列表(我认为),这应该以一种简单的方式解决,而无需将 Int 更改为字符串或任何其他类型变量,但我完全不知道该怎么做。

【问题讨论】:

  • 看看将一个数乘以 10 会发生什么...
  • 只是为了澄清 (++) 函数:它只适用于列表。字符串是字符列表,这就是它与字符串一起使用的原因。

标签: haskell int concatenation


【解决方案1】:

您正在尝试以图形方式解决问题(将整数视为字符串),您希望将其视为数值问题。对于正值,附加数字由以下函数完成。

addDigitPositive a b = 10 * a + b

不幸的是,如果a < 0,这将起作用。在这种情况下,我们将不得不减去 b。我们可以轻松地将这个功能与函数保护结合起来。

addDigit a b | a < 0     = a * 10 - b
             | otherwise = a * 10 + b

【讨论】:

    【解决方案2】:

    或者您可以图形方式解决它,通过使用show 将数字转换为字符串,然后将它们与(++) 连接:

    addDigit :: Int -> Int -> String
    addDigit x y = (show x) ++ (show y)
    

    现在,如果您仍然想要 Int 作为输出,您可以使用 read 将字符串转换为 Int:

    addDigit :: Int -> Int -> Int
    addDigit x y = read ((show x) ++ (show y))
    

    如您所见,给猫剥皮的方法不止一种。

    我希望这会有所帮助。

    【讨论】:

    • 提问者明确表示他确实想要涉及“将 Ints 更改为字符串”的解决方案。
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 2016-02-26
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多