将元组列表的索引与整数列表进行比较

时间:2015-11-18 23:58:09

标签: haskell

我是函数式编程和haskell的新手。

基本上,我已经形成了一个元组列表,它们被排序和编入索引,就像这样

listOfCharTuples = [(1,H),(2,a),(3,s),(4,k),(5,e),(6,l),(7,l)

作为输入,我将得到一个最大的有序整数列表,这个列表中的元组数。

我想要一种方法来创建一个函数,在给定整数列表的输入的情况下打印出相应的字符,所以如果给出的列表是,例如[1,3,5],我希望打印这个函数" HSE"

我可能会获得任何输入字符列表,到目前为止我唯一取得的进展是将它们变成索引元组列表,我真的很难解决这个问题

2 个答案:

答案 0 :(得分:1)

这是一个可能的定义,使用列表理解:

f :: [Int] -> [(Int,Char)] -> String
f is ts = [c | (i,c) <- ts, i `elem` is]

然后

f [1,3,5] listOfCharTuples

答案 1 :(得分:0)

正如评论中所暗示的,更通用的一种可能的解决方案(不需要输入的有序性)可以使用lookup函数:

import Data.Maybe (fromMaybe)

lookupAll :: [(Int,Char)] -> [Int] -> String
lookupAll tuples = map (\x -> fromMaybe '?' $ lookup x tuples)

示例:

putStrLn $ lookupAll listOfCharTuples [1,3,5] -- Hse
putStrLn $ lookupAll listOfCharTuples [5,3,1] -- esH