我将列表推导式与递归相比较,发现前者几乎不可能实现。我试图将一个字符串“te1234ST”转换为“TEST”。看起来很简单,但有一些限制:不能使用任何Haskell预定义函数,如isAlpha,并且必须使用列表推导式。
目前为止,我已经花费了很长时间,但是我的代码还很糟糕:
目前为止,我已经花费了很长时间,但是我的代码还很糟糕:
convertAllToUpper :: String -> String
convertAllToUpper xs = [n |n <- xs, check n == True]
-- This may not even be allowed, and I know it's incorrect anyway
check :: n -> Bool
check (n:ns)
| n `elem` ['a'..'z'] = True
| n `elem` ['A'..'Z'] = True
| otherwise = False
我只是在尝试让这个工作起来,甚至还没有开始担心如何将小写字母改为大写字母。
任何指向正确方向的建议都会非常非常感谢。
编辑:应该提到,不能使用if、then、else进行从小写转换为大写的转换。只能使用列表推导式和列表运算符。