#list #dictionary #lambda #prolog #maplist
#Список #словарь #лямбда #пролог #maplist
Вопрос:
Изобрел быстрый и грязный хэш-например, используя список, т.е.
[ key1:val1,key2:val2, ....]
Я могу получить ключи и значения :
hl_keys(HL,Res) :- maplist(I^K^(I = K:_),HL,Res).
hl_vals(HL,Res) :- maplist(I^V^(I = _:V),HL,Res).
но как мне получить конкретное значение по ключу и ключ по значению?
Комментарии:
1. Есть ли причина не использовать существующий словарь (он же список ассоциаций или карта) библиотеки?
2. нет, просто мысль — это умная идея для небольших хэшей, и ее можно использовать для быстрых аргументов / реквизитов… у elixir есть что-то похожее
3. Предполагая небольшое количество пар, вы могли бы использовать вместо этого простую реализацию двоичного дерева, поскольку ее наихудший случай будет таким же, как список, но в среднем может обеспечить лучшую производительность.
Ответ №1:
это было просто :
hl_val(HL,Key,Res) :- member(Key:Res,HL).
hl_key(HL,Val,Res) :- member(Res:Val,HL).
и хорошо, что он действует как двусторонний хэш
Комментарии:
1. В Prolog более идиоматично использовать
Key-Value
, а неKey:Value
. В остальном, молодец!