2015-12-18 9 views
-3

Я сделал функцию в Haskell, где у меня есть список кортежей, и хочу извлечь только второе значение каждого кортежа и вернуть список вторых значений кортежей. Я написал эту функцию, но я получаю странные ошибки ..Проблема с Haskell с кортежами

--converts a list of tuples to single list 
tupleToList :: [Stat] -> [Int] 
tupleToList ((a,b):xs) = b : tupleToList xs 

Я получаю сообщение об ошибке на «:» после (а, б) во второй строке. Любые идеи, которые могут вызвать проблему? Сама функция не кажется мне неправильной, но я новичок в Haskell, поэтому, возможно, есть что-то, что я не буду делать правильно.

+0

, кстати, 'Stat' является типом, который является кортеж вида: (String, Int) –

+1

«Я получаю сообщение об ошибке» - какая ошибка? Мне кажется, что код тоже мне подходит. Может быть, включает минимальный рабочий пример (включая импорт, определение типа и т. Д.). – user2407038

+0

это ошибка синтаксического анализа на входе ':' –

ответ

1

Как другие сказали, что не кажется, что любая ошибка в том, что вы написали (кроме того, что я заметил: вы не обрабатываете случай пустого списка.)

Вы спросили в комментариях, как переписать его.

Самый простой способ сделать то, что сказал Карстен

tupleToList = map snd 

Если по какой-то причине вы хотите построить на вашей собственной версии.

tupleToList :: [Stat] -> [Int] 
tupleToList [] = [] 
tupleToList ((a,b):xs) = b : tupleToList xs 
0

Вы можете сделать это очень просто, как это:

tupleToList = map snd 

результат:

> tupleToList [(1,"a"),(2,"b"),(3,"c")] 
["a","b","c"] 
Смежные вопросы