haskell - Haskell从整数到字符串(自己的函数)
问题描述
我需要有关将整数转换为字符串的函数的帮助:
例如:fromInteger 19 == "91"
我将整数转换为字符的辅助功能:
fromDigit :: Integer -> Char
fromDigit 0 = '0'
fromDigit 1 = '1'
fromDigit 2 = '2'
fromDigit 3 = '3'
fromDigit 4 = '4'
fromDigit 5 = '5'
fromDigit 6 = '6'
fromDigit 7 = '7'
fromDigit 8 = '8'
fromDigit 9 = '9'
这是我的主要功能:
fromInteger :: Integer -> String
fromInteger n =
if n == 0 then ""
else fromInteger(tail n) ++ fromDigit(head n)
我应该只使用:tail、head、:、null 和数学函数
解决方案
首先,整数不是列表,因此您不能将整数传递给head
or tail
。ThenfromInteger
已经在前奏曲中定义了,所以我建议将它重命名为fromInteger_
. 因此,要提取最低有效数字,您可以减少整数模 10。但要应用 recusion,您还需要前导数字,您可以通过使用整数除以 10 来获得。有一个很好的函数divMod
可以一步完成. 现在,您建议的函数无法正常工作,因为您将其定义为返回 aString
但第一种情况不返回字符串,因此让我们将其更改为空字符串""
。然后你想用它++
来连接字符串。这意味着我们需要转换我们得到的数字fromDigit
到一个字符串 - 我们可以通过将它括在括号中来做到这一点。(字符串只不过是字符列表。)通过这些修改,一切似乎都可以正常工作:
fromInteger_ :: Integer -> String
fromInteger_ n
| n == 0 = ""
| otherwise = fromInteger_ d ++ [fromDigit m]
where (d, m) = divMod n 10
main = print $ fromInteger_ 12451
我不知道如何或head
将如何帮助您使用您的方法。tail
null
推荐阅读
- android - 数据未更改时调用 Android ViewModel onChanged
- android - retrofit-2 - 在将图像和音频上传到 aws 服务器时获取 403 响应代码
- ruby-on-rails - 每个 current_user Rails
- android - 验证应用内购买
- nlog - 使用 NLog 登录多个表
- node.js - 是否可以通过 Twitter API 从多个特定帐户中检索推文?
- firebase - 创建设备组的registration_ids是什么?
- python - Python - 将每一行放入一个变量中
- opencv - 如何在自动驾驶汽车中使用 CNN 的输出作为另一个的输入
- linux - 将命令输出分配给变量