2015-05-05 3 views
1

Я новичок в Haskell, так что медведь со мной.Редактирование первого элемента в списке в Tuple в Haskell

Можно ли удалить первый элемент списка внутри кортежа?

Так что, если у нас есть что-то вроде:

function:: [([x], y)] -> [([x], y)] 

Можем ли мы изменить список, так что первый элемент списка будет удален? Так что кортежи как:

[([1,2,3], 4), ([5,6,7], 8), ([9,10,11,12], 13), ([14,15], 16)] 

стать

[([2,3], 4), ([6,7], 8), ([10,11,12], 13), ([15], 16)] 

?

Или это невозможно, и я трачу свое время, пытаясь понять это?

+0

Да, это возможно. Сама подпись вашего типа указывает, что такое вещь возможно. – Sibi

+0

Как бы вы к этому подошли? – Lincoln

ответ

1

Начните с написания более простой функции ([x],y) -> ([x],y). Что-то вроде этого будет работать:

f ((x:xs), y) = (xs, y) 

Вам нужно будет решить, что делать, когда список пуст. Одним из вариантов являются возвращение пустого списка еще раз:

f ([], y) = ([], y) 

Другой альтернативой является создание ошибки, как функция tail делает в этом случае вы могли бы просто использовать, что для всей вашей реализации.

f (xs, y) = (tail xs, y) 

Далее вы можете использовать функцию высшего порядка под названием map, чтобы получить конечную функцию. Это тип (a -> b) -> [a] -> [a]. Если вы передадите f в качестве первого аргумента, то a и b оба являются ([x],y).

Смежные вопросы