Haskell求反函数

Rob*_*Rob 2 haskell

这是我的任务:编写一个函数:

onlyDigits :: String -> String
Run Code Online (Sandbox Code Playgroud)

从字符串中去除所有非数字字符(例如,onlyDigits“ ac245d62”为“ 24562”)。

我有这个:

onlyDigits :: String -> String
onlyDigits a = [ (not)isAlpha b | b <- a ]
Run Code Online (Sandbox Code Playgroud)

但我不能编译它

谁能看到我哪里出问题了?

gni*_*urf 5

通过写

(not) isAlpha b
Run Code Online (Sandbox Code Playgroud)

您将not两个参数应用到isAlphab,这可能就是编译器抱怨的原因。

如果您解决了这个小错误,现在写:

onlyDigits :: String -> String
onlyDigits a = [ not (isAlpha b) | b <- a ]
Run Code Online (Sandbox Code Playgroud)

您仍然会收到错误消息,因为这会创建一个Bools 列表!


您可能想要的是:

onlyDigits :: String -> String
onlyDigits a = [ b | b <- a, not $ isAlpha b ]
Run Code Online (Sandbox Code Playgroud)

这将需要的所有元素ba,即满足条件not (isAlpha b)

您还可以使用该filter功能并具有无点功能:

onlyDigits :: String -> String
onlyDigits = filter (not.isAlpha)
Run Code Online (Sandbox Code Playgroud)

甚至更好:

onlyDigits :: String -> String
onlyDigits = filter isDigit
Run Code Online (Sandbox Code Playgroud)

只保留数字!