所以我试图在haskell中编写一个函数,它执行以下操作:1.输入是字符串2.函数首先删除字符串的所有字母,只保留数字3.函数将字符串数转换为int数4.函数和字符串中的数字一起打印出来
我的代码直到'第3步
func str =
do
str <- filter (< 'a') str
str2 <- map digitToInt str
return str2
Run Code Online (Sandbox Code Playgroud)
不知何故,如果我删除第4行地图digitToInt它工作直到第2步罚款但这不起作用但我不知道这里的问题是什么
错误是与实际类型Char无法匹配的预期类型[Char]
先感谢您
您根本不需要do符号,只需要正常的变量绑定.所以:
func str = str2 where
str1 = filter (<'a') str
str2 = map digitToInt str1
Run Code Online (Sandbox Code Playgroud)
跟踪最近使用的名称很烦人,不是吗?此外,它很容易犯错并输入str而不是str1某个地方或类似地.输入功能组成:
func str = str2 where
str2 = (map digitToInt . filter (<'a')) str
Run Code Online (Sandbox Code Playgroud)
事实上,我会内联定义str2,然后str完全忽略:
func = map digitToInt . filter (<'a')
Run Code Online (Sandbox Code Playgroud)
我宁愿使用isDigit过(<'a'); 我们可以同时折腾一笔钱.
func = sum . map digitToInt . filter isDigit
Run Code Online (Sandbox Code Playgroud)
在我看来,读起来很干净.