“显示”返回我想要的东西以及一个奇怪的字符串

时间:2019-09-02 12:15:03

标签: haskell haskell-prelude

我有一个函数需要获取列表中的所有Integer并将它们显示为字符串,即“ Beans 1.29”应返回129。我的函数如下

multDigitsRecTest :: String -> String
multDigitsRecTest [] = ""
multDigitsRecTest (x:xs)
  | isDigit x = show (digitToInt (x), multDigitsRecTest xs)
  | otherwise = multDigitsRecTest xs

似乎返回带有其他奇怪内容的整数。有什么方法可以将int作为字符串返回吗?

1 个答案:

答案 0 :(得分:3)

您基本上在这里要过滤数字字符。因此,您可以将其实现为:

import Data.Char(isDigit)

multDigitsRecTest :: String -> String
multDigitsRecTest = filter isDigit

例如:

Prelude Data.Char> multDigitsRecTest "Beans 1.29"
"129"

打印噪音的原因是因为您致电show (digitToInt x, multDigitsRecTest xs)。这是一个2元组(Int, String)。由于IntString都是Show类型类的成员。元组也是。例如,它将打印(2, "(5, \"\")")