添加到元组的字符列表的Haskell列表

时间:2015-04-08 13:01:40

标签: string list haskell

示例原始(41.12, [1,2,3,0])

name = ["pete","ben","bill","bob"]

示例输出(41.12, [1,2,3,0], ["ben","bill","bob","pete"])

到目前为止

代码:

getnames :: (Double, [Int]) -> (Double, [Int] -> [[Char]])
getnames ( nil , []) = error "List is empty"
getnames xs = [(doublevalue , listofints, listofstrings))  | x <- xs]

如何使用int列表从名称列表中获取值并将其放入元组中(我知道当我将其添加到薄纱中时,它不再是元组)

我会用什么方法来做这件事?

1 个答案:

答案 0 :(得分:3)

运算符(!!)可用于索引列表。给定一对,您可以使用以下内容:

getnames :: (Double, [Int]) -> [String] -> (Double, [Int], [String])
getnames (dbl, ixes) names = 
    let namesLst = map (names !!) ixes in
    (dbl, ixes, namesLst)

Live demo

为了得到你想要的东西,我已经修复你的签名,以便能够传递名称并修复返回值类型(最后返回一个带有函数的三元组)。另请注意,[Char]String的类型完全相同。

所以在函数体内你有dbl这是你的双倍并直接转发到最后的三元组。然后你有ixes,它们是你必须从ixes获取的元素的索引。

此时,我们通过在索引上映射索引函数来计算namesLst,以便以正确的顺序获取名称。一旦我们有了这个列表,我们就必须把它放在三元组的第三个元素中。

如果您希望它在空索引列表上失败(即使名称列表为空),您可以添加:

getnames (_, []) _ = error "..."

其中_表示&#34;我不在乎足以说出这个论点&#34;。并且可以看作是您不会使用的论点的占位符。