У меня возникли проблемы, выясняя эту функцию из:Сравнение элементов в списке пар
Определить функцию
maybeA :: [(String, a)] -> Maybe (String, a, a)
, которая принимает список пар. Если список входных данных имеет две пары(a1, b1), (a2, b2)
такие, что a1 = a2, функция возвращает кортеж, содержащий a1 и b1, b2. В противном случае он ничего не возвращает. Пример:maybeA [("a", 1), ("b", 2), ("b", 3)]
вернетJust ("b", 2, 3)
.
Какие-либо намеки?
Благодарим за помощь! Ваш подход должен принимать 2 аргумента, которые имеют 2 списка? Поскольку возможно A '_ [] = Nothing, тип MaybeA' должен быть :: [(String, a)] -> [(String, a)] -> Maybe (String, a, a) правильно? И это будет работать, если в каждом списке будет всего одна пара. Есть ли способ, которым эта функция может принимать только один список из многих пар? Я действительно ценю ваш ответ, хотя :) – user496579
Вероятно, это то, что ожидает домашняя проблема, но обратите внимание, что это довольно ужасный алгоритм на практике, потому что 'lookup' должен выполнять линейный поиск по списку. Бинарное дерево, такое как 'Data.Map', будет намного лучше. –