我是函数式编程和haskell的新手。
基本上,我已经形成了一个元组列表,它们被排序和编入索引,就像这样
listOfCharTuples = [(1,H),(2,a),(3,s),(4,k),(5,e),(6,l),(7,l)
作为输入,我将得到一个最大的有序整数列表,这个列表中的元组数。
我想要一种方法来创建一个函数,在给定整数列表的输入的情况下打印出相应的字符,所以如果给出的列表是,例如[1,3,5],我希望打印这个函数" HSE"
我可能会获得任何输入字符列表,到目前为止我唯一取得的进展是将它们变成索引元组列表,我真的很难解决这个问题
答案 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