Haskell Разделение списка на два: четные и нечетные числа - PullRequest
0 голосов
/ 24 июня 2018

Я схожу с ума от этого простого упражнения.Я просто хочу разделить список на два, разделяя четные и нечетные числа.Мой код следующий:

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]

Единственный результат, который я получаю, - это тот же список, который я пишу, так же, как я написал.То есть, если я введу [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]

Что я делаю не так.

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Ваш код абсолютно правильный, молодец. Это то, как ты это называешь. Давайте посмотрим на ваш 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]

Когда вы пишете что-то в 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])

Это говорит 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). Это не будет работать.

0 голосов
/ 24 июня 2018

Вы говорите

, если я введу [1,2,3,4,5,6], результат будет [1,2,3,4,5,6] таким жеway

Но то, что вы должны ввести, это вызов функции:

ghci> separarPorPosicion [1,2,3,4,5,6]
([2,4,6],[1,3,5])

Другой способ написания вашей функции может быть:

separarPorPosicion xs = case xs of
  o:e:ys -> let (es,os) = separarPorPosicion ys in (e:es,o:os)
  [o] -> ([],[o])
  [] -> ([],[])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...