【发布时间】:2021-09-28 20:26:03
【问题描述】:
我正在尝试根据列表中的索引/位置将列表拆分为偶数和奇数。例如对于列表[2,3,6],结果应该是even = [2,6] 和odd = [3]。
我想使用不使用列表推导的方法——一次匹配两个元素,将一个放在偶数列表中,一个放在赔率列表中。
但我不确定让它工作的语法。我知道如何从逻辑上讲,但我在语法上苦苦挣扎。这是我目前所拥有的:
splitOnPos :: [a] -> ([a], [a])
splitOnPos [] = ([], [])
splitOnPos (x1:x2:xs) = (odds, evens)
where
odds = x1 : splitOnPos xs
evens = x2 : splitOnPos xs
我收到以下关于类型的错误:
* Couldn't match expected type `[a]' with actual type `([a], [a])'
* In the second argument of `(:)', namely `splitOnPos xs'
In the expression: x2 : splitOnPos xs
In an equation for `evens': evens = x2 : splitOnPos xs
【问题讨论】:
-
@MichaelLitchard 我刚刚编辑了它与类型和发生的错误有关的错误,因为我无法弄清楚语法
-
@httpsissecure,你还没有给minimal reproducible example。
-
@httpsissecure,显然你还没有阅读我发布的链接。
-
@httpsissecure,其中的所有代码只有 5 行左右?太好了,
split是什么?Prelude里没有这种东西,你从哪里弄来的? -
@httpsissecure 我建议给每个值一个明确的类型,它会引导你找到解决方案。这样做,而不是让别人为你找到问题,你会得到更深刻的理解。
标签: haskell