【发布时间】:2020-11-30 16:10:00
【问题描述】:
我创建了函数filter,它在列表中找到最小的项目并过滤掉任何包含非字母字符的字符串。例如
filter ["a","bb","ccc","dddd","e","f"] = "a"
但是如果我使用这个例子,isAlpha 似乎不起作用,我得到filter ["**", "a", "?"] = "**" 而不是= "a"
filter :: [String] -> String
filter [] = error "String is Empty"
filter [x] = x
filter (x:y:xs) = if x < y && all isAlpha x then g(x:xs) else g(y:xs)
【问题讨论】:
-
不要将你的函数命名为
filter,因为它不是过滤器(尽管它可以实现使用filter :: (a -> Bool) -> [a] -> [a]定义在base库)。 -
@CamelBak:请先指定函数。你如何在这里比较字符串?为什么
"a"小于"?"? -
对不起。作为 ”?”不是按字母顺序排列的。
-
使用
<比较字符串并不真正涉及字符串长度。字符串按字典顺序 排序,就像字典中的单词一样。在 Unicode 和 ASCII 序列中,字符 '*' 出现在 'a' 之前。因此,("*" < "a")和("*xyz" < "a")两个表达式都计算为 True。更多详情SO-q3651144。 -
为什么
["**", "?"]会返回一个空字符串,而[]会报错?
标签: haskell