2014-10-19 4 views
0

Я пытаюсь написать функцию для игры в домино, которая получает оценки (5,3s западной) , но я не могу получить правильный синтаксис, но у меня есть идеяДобавление кортежа в список кортежей

код:

type Domino = (Int,Int) 
    type Line = [Domino] 

     score :: Line -> Domino 
     score [] = 0 
     score line 
      | (a,b):line = (a+b) + (score line) 

проблема меня в том, так как линия представляет собой список кортежей, я не знаю, как изобразить голова и последние из списка и добавить их

+1

Прежде всего, вы имеете в виду 'type Line = [Domino]', если вы хотите, чтобы 'Line' был списком' Domino'. Во-вторых, вам, похоже, нужны стражи, а не шаблонные совпадения в 'score'. Вы также не можете добавлять 'Domino' без определения подходящего '(+)' или, скорее всего, того, что хотите, что делает 'Domino' экземпляром' Num'. Там также странный трейлинг серьезный акцент, который вызовет у вас проблемы. – gspr

+0

да, извините, моя ошибка, которая должна была быть 'type Line = [Domino]' – kazeem

+2

Вы можете (и должны) отредактировать свое сообщение. –

ответ

4

После выполнения мизерной бит исследований по оценке домино для пятерки и тройки, I думаю вы хотите добавить первый компонент первого кортежа в списке и второй компонент последнего кортежа в списке (так что [(3,2),(2,6),(6,1),(1,4)] получает оценку 3 + 4 = 7).

Переводя это в Haskell прост:

score [] = 0 
score dominoes = fst (head dominoes) + snd (last dominoes) 

Пользы head и last не врезаться на пустой список, потому что мы уже соответствует тот случай.

Возможно, я полностью неправильно понял правила подсчета очков, и это не обращает внимания на парные разряды.

+0

Awesome! это действительно помогает упростить вещи – kazeem

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