函数验证haskell

问题描述 投票:0回答:1

我发挥了3个功能,每个功能都可以很好地奏效:

  • 缩写 - 检查字符串仅包含数字
  • CheckStreetName-检查字符串是否仅包含字母
  • ISABBREVIATION-检查字符串是否为“ Ave”。或“圣”
I使使用其他功能的函数CheckAdd

函数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."
haskell
1个回答
2
投票
'.'

,但是(只是重新定义

all1
)要求它实现
all
。为了解决这个问题,例如测试checkStreetName
而不是
all1 checkStreetName $ init xs
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.