如果字符串仅包含数字,则返回true的程序

Oha*_*had 2 haskell

如果字符串只包含Haskell中的数字,我想创建一个返回true的程序.

这是我的尝试:

checkNum :: String -> Bool
checkNum xs = ((length (filter isDigit xs )) == length (xs))
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

不在范围内:`isDigit'

我的代码出了什么问题?

Chr*_*lor 9

这应该工作:

import Data.Char (isDigit)

checkNum :: String -> Bool
checkNum = all isDigit
Run Code Online (Sandbox Code Playgroud)

  • @Shiran除了Sibi和yatima2975指出的内容之外,`length`的另一个问题是它必须在整个列表中运行,因此随着列表的增长它会变慢.根据经验,如果你真的需要知道列表的长度,你应该只使用`length`; 如果你只是用它来找出别的东西那么几乎总是有更好的方法. (6认同)
  • @Shiran除了导入之外,你的代码没有任何问题.Chris的这段代码只是更短,更好. (3认同)
  • @Shiran它适用于至少有一个非数字的无限`String`s,但我不知道这对你来说是否重要:-) (2认同)