示例原始(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列表从名称列表中获取值并将其放入元组中(我知道当我将其添加到薄纱中时,它不再是元组)
我会用什么方法来做这件事?
答案 0 :(得分:3)
运算符(!!)
可用于索引列表。给定一对,您可以使用以下内容:
getnames :: (Double, [Int]) -> [String] -> (Double, [Int], [String])
getnames (dbl, ixes) names =
let namesLst = map (names !!) ixes in
(dbl, ixes, namesLst)
为了得到你想要的东西,我已经修复你的签名,以便能够传递名称并修复返回值类型(最后返回一个带有函数的三元组)。另请注意,[Char]
和String
的类型完全相同。
所以在函数体内你有dbl
这是你的双倍并直接转发到最后的三元组。然后你有ixes
,它们是你必须从ixes
获取的元素的索引。
此时,我们通过在索引上映射索引函数来计算namesLst
,以便以正确的顺序获取名称。一旦我们有了这个列表,我们就必须把它放在三元组的第三个元素中。
如果您希望它在空索引列表上失败(即使名称列表为空),您可以添加:
getnames (_, []) _ = error "..."
其中_
表示&#34;我不在乎足以说出这个论点&#34;。并且可以看作是您不会使用的论点的占位符。