Haskell:将元组列表转换为haskell函数的最佳方法?

时间:2011-02-19 20:09:26

标签: list function haskell

我有一个像这样的三元组列表:

mylist = [("a1","a2","a3"), ("b1","b2","b3"), ("c1","c2","c3")]

实际字符串是任意的,除了列表表示将前两个字符串映射到第三个字符串的二进制函数。什么是实现函数的计算速度快的方法

f :: String -> String -> String

这样

f "a1" "a2" == "a3"
f "b1" "b2" == "b3"
f "c1" "c2" == "c3"

而且,是否有一种通用方法可以使用元组列表来执行此操作?

到目前为止,我只想出了

f a b = lookUp (a,b) [ ((x,y),z) | (x,y,z) <- mylist ]

谢谢, 安德烈

2 个答案:

答案 0 :(得分:4)

这通常是通过地图完成的(请参阅Data.Map,该链接还说明了它的工作原理以及如何构建自己的地图)。

您可能需要使用([Char],[Char])作为密钥,因此您的数据可以这样表示:

[(("a1","a2"),"a3"), (("b1","b2"),"b3"), (("c1","c2"),"c3")]

答案 1 :(得分:1)

有点不清楚你希望这个功能做什么。如果它是两个输入到一个输出的任意映射,那么请考虑peoro使用Data.Map的建议。如果计算具有一定的系统意义,那么试着发现它背后的算法。

import Data.Char
incStr [c,x] | isNumber x = [c, intToDigit (digitToInt x + 1)]

ghci> incStr "a1"
"a2"