【发布时间】:2021-09-30 20:51:34
【问题描述】:
我需要创建一个函数,它将获取一个整数列表并将它们分成 2 个列表,一个是奇数,另一个是偶数
split :: [a] -> ([a], [a])
split = undefined
上面是功能基线,下面是我目前的尝试
split :: [a] -> ([a], [a])
split [] = ([],[])
split (x:xs) | x mod 2 == 0 = ([],[x:split xs])
| x mod 2 /= 0 = ([x:split xs],[])
| otherwise = ([],[])
【问题讨论】:
-
您确定需要检查列表元素值的奇偶性,而不仅仅是它们的位置吗?我的意思是,在后一种情况下,您还可以在签名允许的情况下运行
split [True, False]和split "hello"。此外,您的签名不允许检查x `mod` 2,因为这对非整数x毫无意义。 -
提示:
split (x:xs)将采用(x:ys, zs)或(ys, x:zs)的形式,其中(ys, zs)是split xs的结果。您需要在 Haskell 中将其写出来,并弄清楚您如何决定使用这两种情况中的哪一种。