Так у меня есть список кортежей, определенных как так:Получение элемента из списка кортежей в Haskell
type Domino = (Int,Int)
data End = L|R
type Board = [Domino]
d :: Domino
d= (4,5)
b :: Board
b= [(1,3),(3,3),(3,4)]
В моей функции мне нужно, чтобы быть в состоянии получить первую часть доски. Так, например, я могу возглавить совет, чтобы получить домино (1,3) в качестве кортежа, но я пытался получить целое число от этого и просто терпеть неудачу. Мне нужно уметь сравнивать это целочисленное значение. Мой вопрос заключается в том, как вы получаете первую часть кортежа в списке, поскольку все, что я делал, и поиск продолжал терпеть неудачу. Извиняюсь, если это действительно просто, я новичок в haskell. Это мой код функции, очевидно, с кучей ошибок
goesP :: Domino->Board->End-> Bool
goesP _ []_ = True
goesP dom bor L = (if head bor fst == fst dom then True else if last bor == snd then True else False)
Каким-то образом. не совсем понятно, что вы хотите сделать. Первая часть пары может быть извлечена с помощью 'fst :: (a, b) -> a'. Сравнение не должно быть трудным. – Zeta
'fst (1,3)' дает '1'. Используйте 'snd' для другого компонента. Альтернативно, «случай (1,3) of (x, y) -> useBoth x y'. При прочих равных условиях я бы рекомендовал сопоставление шаблонов перед проекциями 'fst/snd', и это часто приводит к более четкому коду. – chi
Моя проблема заключается в том, что мне нужно получить кортеж из списка Board, а затем извлечь из него отдельный элемент. Поэтому я должен возглавить список, чтобы вернуть кортеж (1,3), а затем fst его, чтобы получить 1, но я пытаюсь сделать это все в одном разделе, если это имеет смысл. Я отредактирую приведенное выше с кодом для моей функции. – cjbatin