1

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

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

它似乎用其他奇怪的东西返回整数。有没有办法可以将 int 作为字符串返回?

4

1 回答 1

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-tuple (Int, String)。因为两者Int都是类型类String的成员Show。元组也是如此。例如,它将打印(2, "(5, \"\")")

于 2019-09-02T12:17:59.623 回答