我对Haskell非常陌生。
我想使用Haskell验证邮寄地址。
29b, roadname, cityname, postalcode, country
我想验证以下内容 1)第一部分(29b)在开始时必须至少有一个数字。 2)roadname,cityname,country是字符。 3)邮政编码是6位数的字符或整数。 4)每个都用逗号(,)
分隔我开始尝试这个,但我无法做到。
validtion :: String -> Bool
validtion [] = []
validtion (x:xs)
|(isInt :xs) = validtion xs
|(',':xs) = validtion xs
validtion (x:xs)= x: validtion xs
任何人都可以帮我解决这个问题。
答案 0 :(得分:2)
由于这显然是一项功课,并且您没有尝试过阅读Haskell文档,我只会在这里提供一些提示和线索,并将在月底填写答案。
首先,Haskell中没有值(在你的情况下是函数)可以以大写字母开头。所以Validtion
(不知道为什么你经常错过a
)是无效的标识符。
然后,你不能同时拥有=
和守卫,更不用说卫兵必须在同一列上对齐。
第三,(isInt : xs)
表示包含至少一个元素的列表,isInt
可以引用第一个元素,xs
可以引用所有其他元素。同样,',':xs
表示以,
开头的字符串。
现在,如何解决它:您需要一个函数String -> Bool
,但由于String
有几个部分,您需要将其拆分为单词并删除,
。在Hoogle上搜索String -> [String]
和String -> String -> String
,了解要使用的功能。
现在,拥有列表[String]
,您需要部分验证该列表的每个元素。导入Data.Char
并使用其中的函数map
。
最后,从列表[Bool]
获取Bool
,您再次转到Hoogle并搜索[Bool] -> Bool
。