我有一个像这样的三元组列表:
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 ]
谢谢, 安德烈
答案 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"