Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell check integer第一个处理ID号的元素_List_Haskell - Fatal编程技术网

List Haskell check integer第一个处理ID号的元素

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] 在

我是哈斯克尔的新手! 我需要写一个处理ID号的函数。我需要检查整数的第一位。如果号码是1或3,则客户是男性;如果号码是2或4,则客户是女性。我想我需要一个helper函数,它可以将长整数拆分为整数列表。 函数名为szemelyinem,它有一个参数/参数,是一个11长的整数

这是拆分功能:

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