在Haskell中明确键入绑定问题

时间:2011-05-30 14:33:18

标签: haskell

问题说明

  1. 我使用了以下代码来 访问元组列表我不是 得到为什么我得到这个错误是 ...

  2. 我也想知道我 提供了execas mn::[(1,2,3),(6,7,8)]我怎么能 访问(6,7,8)


  3. 纯粹的功能

    type rty= [(Int,Int,Int)]
    
    mn::rty->Int
    mn (a,b,c) = a
    

    错误消息

    Type error in explicitly typed binding
    *** Term           : (a,b,c)
    *** Type           : (a,b,c)
    *** Does not match : rty
    

4 个答案:

答案 0 :(得分:6)

rty与列表[(a, b, c)]相同。您正在匹配元组而不是列表。也许你想要的是:

mn [] = ?
mn ((a, b, c):xs) = ?

答案 1 :(得分:3)

  1. 模式(a,b,c)匹配三元组,而不是三元组列表(rty)。

  2. 如果要访问三元组列表中的第二个元素,则必须使用某种递归解决方案(显式或通过库函数)。它取决于mn应该做什么。

答案 2 :(得分:2)

您正在尝试匹配单个元组,但不匹配元组列表。我建议你改变类型:

mn :: (Int,Int,Int) -> Int
mn (a,_,_) = a

要访问列表的第n个元素,请使用(!!)中的xs !! 2。请注意,该功能不安全。这是,如果列表太短,则抛出异常。

答案 3 :(得分:2)

type rty          = [(Int,Int,Int)]

mn                ::rty -> Int
mn ((a,b,c):xs)   = a

由于rty是一个元组列表,你必须从rty中获取一个元组,然后将其返回。