首页 > 解决方案 > 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 和数学函数

标签: haskell

解决方案


首先,整数不是列表,因此您不能将整数传递给heador 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将如何帮助您使用您的方法。tailnull


推荐阅读