Haskell将列表分为两个:偶数和奇数

Die*_* F. 1 zip haskell

我用这种简单的练习让自己变得疯狂.我只想将列表除以二,将偶数和奇数分开.我的代码如下:

module Proyecto1 where

separarPorPosicion :: [a] ->([a],[a])
separarPorPosicion xs= (pares,impares) where
    pares = [x | (x,y)<- zip xs [1..], even y]
    impares = [x | (x,y)<- zip xs [1..], odd y]
Run Code Online (Sandbox Code Playgroud)

我得到的唯一结果就是我写的相同列表,就像我写的一样.IE,如果我输入[1,2,3,4,5,6],结果将是[1,2,3,4,5,6]同样的方式.

这就是我在GHCi中写的内容:

*Proyecto1> (1,2,3,4,5,6)
(1,2,3,4,5,6)
*Proyecto1> [1,2,3,4,5,6,7]
[1,2,3,4,5,6,7]
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么.

AJF*_*mar 5

你的代码绝对正确,干得好.这就是你如何称呼它.我们来看看你的GHCi:

*Proyecto1> (1,2,3,4,5,6)
(1,2,3,4,5,6)
*Proyecto1> [1,2,3,4,5,6,7]
[1,2,3,4,5,6,7]
Run Code Online (Sandbox Code Playgroud)

当你在GHCi中写一些东西时,你要求它来评估它.所以,当你写信时,[1,2,3,4,5,6,7]你只是在说,"它的价值是[1,2,3,4,5,6,7]什么?" 你没有使用你的功能!

你应该这样写:

*Proyecto1> separarPorPosicion [1,2,3,4,5,6,7]
([2,4,6], [1,3,5,7])
Run Code Online (Sandbox Code Playgroud)

这告诉GHCi separarPorPosicion在值上使用该函数[1,2,3,4,5,6,7].之前,你没有这样做.


旁注:你也写过(1,2,3,4,5,6).重要的是要知道,这不是一个很重要的列表,类型[Int],而是一个元组,类型(Int, Int, Int, Int, Int, Int).你不能这么写separarPorPosicion (1,2,3,4,5,6).这不行.