我发挥了3个功能,每个功能都可以很好地奏效:
函数CheckAdd获取字符串列表,如果以下方式,应返回true。
第一个字符串仅包含数字
最后一个字符串=“ ave”。或St.”
之间的其余字符串应包含字母
例如:[“ 123”,“ ASDD”,“ AVE”。
无论我是虚假而不是真实的,我不知道为什么。我单独检查了每个功能。 (顺便说一句,我不允许在Haskell中使用一些现成的功能)SO对于此输入:[“ 123”,“ ASDD”,“ AVE。”]我有错误。为什么?
我还必须说奇怪的是,当我保留2个条件而不是checkadd
中的3个条件时,它可以正常工作checkNumber:: String->Bool
checkNumber xs =((length(filter isDigit xs ))== length(xs))
checkStreetName:: String->Bool
checkStreetName xs =((length(filter isLetter1 xs ))== length(xs))
isLetter1:: Char->Bool
isLetter1 ch =((ch>='A' && ch<='Z') || (ch>='a' && ch<='z'))
checkAdd :: [String]->Bool
checkAdd (num:xs) = (checkNumber num && (all1 checkStreetName (tail xs)) && isAbbreviation (last1 xs))
all1 :: (String->Bool)->[String] -> Bool
all1 f xs = ((length(filter f xs)) == length(xs))
isAbbreviation:: String->Bool
isAbbreviation str |str=="Ave." || str=="St." =True
|otherwise =False
last1 :: [a]->a
last1 (x:[]) = x
last1 (x:xs) =last1 xs
您遇到的问题仅仅是
"Ave."