Связь между функцией карты в Data.Map и функцией fromList

Я столкнулся с той же проблемой, что и вы. К счастью, после того, как googling выполнил жесткие шаги на этой странице , SSL работает с моим HttpListener.

2
задан Will Ness 15 January 2019 в 22:25
поделиться

1 ответ

Ух ты, похоже, ты в замешательстве. Это понятно, так как слово «карта» означает как минимум четыре разные вещи!

  1. Модуль Data.Map (вам, кажется, ясно об этом)
  2. Данные тип Map.Map k v (в модуле Data.Map), который является конечным отображением, он же «словарь», он же «хеш-таблица» (но не использует хеширование)
  3. The [1131 ] функция Map.map (в модуле Data.Map), которая применяет функцию к каждому значению в Map (словарь)
  4. Существует также стандартная функция map (в [ 1111]), который работает со списками и не имеет ничего общего с Map s (словарями).

Вот так, что за глоток!


Вот некоторые объяснения сигнатур:

Map.fromList :: (Ord k) => [(k, a)] -> Map.Map k a

Map.Map k a - параметризованный тип данных с двумя параметрами, [ 1114] и a. Если вы знакомы с дженериками в семействе C ++, это может быть написано Map<K, A>.

Функция fromList принимает список пар (ключ, значение), [(k, a)] и возвращает словарь. Ключи словаря имеют тип k, а значения имеют тип a. (Ord k) означает, что ключи должны быть упорядочены по отношению друг к другу, поскольку они хранят структуру данных в виде отсортированного сбалансированного дерева.

-- A dictionary from people's names to their age
ages :: Map.Map String Int
ages = Map.fromList [("Bill", 32), ("Carol", 71), ("Diddy", 13)]

Map.map :: (a -> b) -> Map.Map k a -> Map.Map k b

Это принимает функцию от вещей типа a к вещам типа b в качестве первого параметра. В качестве второго параметра он принимает словарь из любого типа ключа k для вещей типа a и применяет функцию к каждому значению в словаре, возвращая словарь из того же типа ключа для вещей типа b ].

-- A dictionary from people's names to whether they are allowed to drink alcohol
canDrink :: Map.Map String Bool
canDrink = Map.map (\age -> age >= 21) ages

fromList' - это просто пользовательская реализация fromList, реализованная путем многократной вставки. Неудивительно, что он имеет ту же сигнатуру, что и fromList (но переменные типа называются по-разному - это не имеет значения).

0
ответ дан luqui 15 January 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: