Отбрасывание первого элемента из трехэлементного кортежа - PullRequest
1 голос
/ 30 ноября 2011

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

(а, б, в) -> (б, в)

По сути, я должен использовать функцию, которая создает кортеж из 3 элементов, а затем мне нужно использовать функцию, которая использует только два последних элемента.

Спасибо за ваши ответы.

Ответы [ 3 ]

11 голосов
/ 30 ноября 2011

Ваш вопрос почти имеет необходимую функцию!

\(a,b,c)->(b,c)

- это функция, которая вам нужна.Это «анонимная» функция, определенная на лету, вам не нужно давать ей имя.Например, если у вас есть

someFunc :: someType -> (Int, Char, Bool)

Вы можете сделать

(\(a,b,c)->(b,c)) (someFunc someValue)

, чтобы получить второй и третий компонент someFunc someValue.

5 голосов
/ 30 ноября 2011

Вы можете сопоставлять шаблоны с несколькими синтаксическими конструкциями, такими как let.Так что вы можете сделать что-то вроде:

let (a, b, c) = triTuple in fn (b, c)
1 голос
/ 30 ноября 2011

Вы можете использовать case:

case x of (a, b, c) -> (b, c)
...