【发布时间】:2014-11-24 03:59:23
【问题描述】:
我想制作一个程序
- 将一个字符和一个字符对列表作为参数,
- 如果它等于输入字符,则返回对的第一个元素,否则返回未更改的对。
我有以下代码:
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] 匹配
在“查找”的等式中
等等……
抱歉,我对 Haskell 比较陌生。我很确定在递归处理元组 ([(x,y),(xs,ys)]) 时犯了一个错误,但我不知道如何更改它。有什么想法吗?
【问题讨论】:
-
我不太明白 - 你想要一个字符列表吗?你能准确地说出你想让这个函数做什么吗?
-
如果要在不同情况下返回一个值和一对,可以将结果类型包装在
Either数据类型中。 -
如果它等于输入字符,则返回对的第一个元素,否则返回未更改的对。你不能这样做。结果的类型不能因一种情况 (
Char) 与另一种情况 ((Char,Char)) 不同。请说明您的规格。