首页 > 解决方案 > 'show' 返回我想要的东西和一个奇怪的字符串

问题描述

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

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

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

标签: haskellhaskell-prelude

解决方案


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

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, \"\")")


推荐阅读