【发布时间】:2020-05-16 17:08:59
【问题描述】:
我必须编写一个移位函数,从“表”(列表)中搜索元素对。如果元素不在给定的列表中,它必须给出一个 '#' az 结果。
例子:
shift [('b', 'g'), ('c', 'h'), ('a', 'f')] 'a' == 'f'
shift [('b', 'g'), ('c', 'h'), ('a', 'f')] 'b' == 'g'
shift [('b', 'g'), ('c', 'h'), ('a', 'f')] 'b' == 'g'
shift [('b', 'g'), ('c', 'h'), ('a', 'f')] 'x' == '#'
我的代码:
shift :: [(Char,Char)] -> Char -> Char
shift z c = [b |(a,b)<-z,a==c]!!0
它有效,但不适用于例外情况。我似乎无法让它适用于不在列表中的元素。 我试过了:
shift z c
| c `elem` z =[b |(a,b)<-z,a==c]!!0
| otherwise ='#'
还有一个辅助函数:
isgood z c
| c `elem` z = (shift z c)
| otherwise = '#'
但它们不起作用。如何解决?
【问题讨论】:
-
提示:看看
ord和chr。 -
这可能是 Map 对象的工作。如果是这样,您可能会发现函数 findWithDefault 很有用。
-
最直接的库函数是
lookup。你可以使用fromMaybe来获得结果,或者如果你愿意,可以自己进行模式匹配。
标签: list function haskell shift caesar-cipher