Как получить значение из пары ключ-значение в прологе - PullRequest
2 голосов
/ 14 марта 2020

Мне трудно найти способ доступа к значениям из пар ключ-значение пролога.

   gas-[2, 3, 1, 1, 3]

Выше приведен пример моей пары, газ - это ключ, а список - это значение. Причина, по которой я использую этот формат AB, заключается в том, что термин - (A, B) обозначает пару элементов A и B. В прологе (-) / 2 определяется как инфиксный оператор. Следовательно, термин может быть записан эквивалентно как AB. из this .

. Я хочу получить список просто 'gas'.

1 Ответ

3 голосов
/ 15 марта 2020

Это делается с помощью SWI-Prolog (с резьбой, 64 бита, версия 8.1.24) на Windows 10

?- use_module(library(pairs)).
true.

Сначала приведем пример построения пар только из ключа и значения.

?- pairs_keys_values(Pairs,[gas],[[2,3,1,1,3]]).
Pairs = [gas-[2, 3, 1, 1, 3]].

Теперь, когда синтаксис ожидаемого для пар ключ-значение известен,

извлекает значение из пары, для которой задан ключ.

?- pairs_keys_values([gas-[2,3,1,1,3]],[gas],Value).
Value = [[2, 3, 1, 1, 3]].

РЕДАКТИРОВАТЬ

Изучив это, вы, скорее всего, захотите не пары ключ-значение , а Списки ассоциаций См .: библиотека (ассо * 1029) *): Списки ассоциаций

?- list_to_assoc([a-1,b-2,c-3],Assoc),get_assoc(b,Assoc,Value).
Assoc = t(b, 2, -, t(a, 1, -, t, t), t(c, 3, -, t, t)),
Value = 2.

Используя ваш пример gas-[2,3,1,1,3]

?- list_to_assoc([a-1,gas-[2,3,1,1,3],c-3],Assoc),get_assoc(gas,Assoc,Value).
Assoc = t(c, 3, -, t(a, 1, -, t, t), t(gas, [2, 3, 1, 1, 3], -, t, t)),
Value = [2, 3, 1, 1, 3].
...