2014-10-19 136 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

首先,如果你想让'Line'成为'Domino'列表,你的意思是'输入Line = [Domino]'。其次,你似乎想要守卫,而不是'分数'中的模式匹配。如果没有定义合适的'(+)',或者更可能是你想要的,就可以不添加'Domino's,使得'Domino'成为'Num'的一个实例。还有一个奇怪的落后严重口音,会给你带来麻烦。 – gspr 2014-10-19 20:16:23

+0

对不起,我的错误是为了'type Line = [Domino]' – kazeem 2014-10-19 20:42:58

+2

你可以(也应该)编辑你的帖子。 – 2014-10-19 20:47:08

回答

4

做了微不足道的后位多米诺骨牌得分为五,三分球的研究,我认为您想添加列表中第一个元组的第一个元素和列表中最后一个元组的第二个元素(这样[(3,2),(2,6),(6,1),(1,4)]得分为3 + 4 = 7)。

翻译到这个Haskell是直截了当:

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

headlast的使用不会对空列表崩溃,因为我们已经匹配的话。

虽然这可能是我完全误解了评分规则,但这并不关注双打。

+0

太棒了!这确实有助于简化事情 – kazeem 2014-10-19 21:03:53