List Haskell check integer第一个处理ID号的元素
我是哈斯克尔的新手! 我需要写一个处理ID号的函数。我需要检查整数的第一位。如果号码是1或3,则客户是男性;如果号码是2或4,则客户是女性。我想我需要一个helper函数,它可以将长整数拆分为整数列表。 函数名为szemelyinem,它有一个参数/参数,是一个11长的整数 这是拆分功能:List Haskell check integer第一个处理ID号的元素,list,haskell,List,Haskell,我是哈斯克尔的新手! 我需要写一个处理ID号的函数。我需要检查整数的第一位。如果号码是1或3,则客户是男性;如果号码是2或4,则客户是女性。我想我需要一个helper函数,它可以将长整数拆分为整数列表。 函数名为szemelyinem,它有一个参数/参数,是一个11长的整数 这是拆分功能: split :: Integral x => x -> [x] split 0 = [] split x = split (x `div` 10) ++ [x `mod` 10] 在
split :: Integral x => x -> [x]
split 0 = []
split x = split (x `div` 10) ++ [x `mod` 10]
在我看来,这个概念是将长数字拆分,然后将其加载到函数中,然后检查列表中的第一个元素并返回一个字符串。但我不知道如何开始:/
我有一个这样的例子:
szemelyinem 40504291247
Result: "female"
这是第一步
split :: Integral x => x -> [x]
split 0 = []
split x = split (x `div` 10) ++ [x `mod` 10]
这是第二次
rev:: [Integer] -> [Integer]
rev [] = []
rev (h:t) = rev t ++ [h]
这是第三步
nemdel :: [Integer] -> [Integer]
nemdel [] = []
nemdel (h:t) = drop 10 (h:t)
这是第四次
listtonumb:: [Integer] -> Integer
listtonumb = foldl addDigit 0
where addDigit num d = 10*num + d
最后一个
szemelyinem :: Integer -> [Char]
szemelyinem szam =
if listtonumb(nemdel(rev(split szam))) == 1 || listtonumb(nemdel(rev(split szam))) == 3
then "male"
else if listtonumb(nemdel(rev(split szam))) == 2 || listtonumb(nemdel(rev(split szam))) == 4
then "Female"
else error "Bad ID"
我确信这是一种复杂的方法。你能写一个函数吗,比如说
foo
,这将一个整数
数字转换成一个数字列表?在这里,我认为您不需要通用的整数
s-我甚至不认为您需要将其拆分成一个Int
s列表-如果您有一个字符
s列表,您可以编写您的函数吗?您知道有什么函数可以将您的号码转换为列表或字符吗?(提示:String=[Char]
另一个提示:您可以使用head
或(希望如此)从列表中获取第一个元素的模式)老实说,这是一个家庭作业,但是我的老师给我们展示了一些基本的东西。所以我现在很难过。在爪哇或C++中,这是一个5分钟的任务,但是在哈斯克尔,这是一个噩梦。IDS总是11位数长吗?如果是这样,你能只分10个^吗?10完成了吗?一些注释:nemdel
可以是nemdel=drop 10
,如果您执行split x=(x`mod`10):split(x`div`10)
的话,就不需要rev
,您可以引入一个本地绑定,比如let n=listtonumb(nemdel(rev(split(szam)))在…
中,您不必一次又一次地重写长表达式,我将使用String
而不是[Char]
(但它是同义词,所以它并不重要)也可以使用而不是drop
ing 10保留split
函数并使用take 1
)-如果您已经有了(h:t)
模式,只需返回[h]
;)哦,谢谢你的简化:D