Haskell: Лучший способ превратить список кортежей в функцию haskell? - PullRequest
1 голос
/ 19 февраля 2011

У меня есть список троек строк, как это:

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 ]

4 голосов
/ 19 февраля 2011

Обычно это делается с картой (см. Data.Map, эта ссылка также объясняет, как она работает и как построить свою собственную карту).

Скорее всего, вам потребуетсяиспользуйте ([Char],[Char]) в качестве ключа, чтобы ваши данные могли быть представлены следующим образом:

[(("a1","a2"),"a3"), (("b1","b2"),"b3"), (("c1","c2"),"c3")]
1 голос
/ 20 февраля 2011

Немного неясно что вы хотите, чтобы эта функция делала.Если это произвольное отображение двух входов на один выход, то воспользуйтесь предложением peoro об использовании Data.Map.Если вычисление имеет какое-то систематическое значение, попробуйте найти алгоритм, стоящий за ним.

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

ghci> incStr "a1"
"a2"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...