【发布时间】:2019-09-15 09:23:07
【问题描述】:
我正在尝试编写一个函数,该函数接收一个字符串,然后将字符串作为字符串单词列表返回(如内置函数的单词),到目前为止我已经写了
ord :: String -> [String]
ord [] = []
ord xs = let
ys = groupBy (\x y -> y /= ' ') xs
in filter (not . null) ys
我认为这会消除列表中的空字符串,但我只得到这个输出
输入:
ord “aa b c - dd”
输出:
["aa"," b"," "," "," "," "," "," "," c"," "," "," -"," "," "," "," dd"]
当这是我想要的输出时:
[“aa”, ”b”, ”c”, ”-“, ”dd”]
如果我尝试写,我会得到相同的结果
ord :: String -> [String]
ord [] = []
ord xs = filter (not . null) ys
where
ys = groupBy (\x y -> y /= ' ') xs
如何重新编写此代码,以便删除其空字符串列表? 还是使用正确的语法?我刚刚学习 Haskell,但语法仍然有问题......
【问题讨论】:
-
这里的语法没有问题——编译器会告诉你的。重写代码以省略仅包含空格的字符串,并注意某些字符串以空格开头。
-
如果你想用
groupBy把所有的空间扔到他们自己的组里,你也需要看看x。否则,空格将与其后面的非空格组合在一起。null检查空字符串(零个字符),而不是空字符串(只有空格)。
标签: haskell