使用haskell进行邮政地址验证

时间:2014-01-01 13:23:31

标签: haskell functional-programming

我对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

任何人都可以帮我解决这个问题。

1 个答案:

答案 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

PS:看看LYAHRWH。它们都是很好的学习资源,可以在互联网上免费获得。