在元组列表上的递归

时间:2014-11-23 17:56:42

标签: haskell character tuples

我想制作一个

的节目
  • 将一个字符和一对字符列表作为参数,
  • 如果它等于输入字符,则返回该对的第一个元素,否则返回未改变的对。

我有以下代码:

lookUp :: Char -> [(Char, Char)] -> Char    
lookUp a [] = []
lookUp a [(x,y),(xs,ys)]
   | a == x = y : lookUp [(xs,ys)]
   | otherwise = x : y : lookUp [(xs,ys)]

当我编译它时,我会犯很多错误:

  

无法匹配预期类型' char'实际类型[t0]

     

在' lookUp'

的等式中

依旧......

对不起,我对Haskell来说比较新。我很确定在使用元组([(x,y),(xs,ys)])递归处理时犯了一个错误,但我不知道如何更改它。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您的代码修改将输入check:

-- lookUp :: we'll have GHC tell us the type signature    
lookUp a [] = []
lookUp a ((x,y):pairs)
   | a == x = y : lookUp a pairs
   | otherwise = x : y : lookUp a pairs

一些明显的错误:

  • 当你递归调用lookUp时,你只用一个参数调用它(你忘记了a参数)
  • 模式[(x,y),(xs,ys)]仅匹配两对字符的列表。模式((x,y):pairs)匹配非空对列表。第一对被解构为字符xy,并且列表的剩余部分绑定到pairs

使用:t中的ghci命令让GHC告诉您签名的类型。

现在,这是否是你想要的另一个问题。