Вопрос:

Поиск списка ассоциаций по ключу

list prolog associations swi-prolog

8 просмотра

1 ответ

1 Репутация автора

Я реализовал список ассоциаций в swi-prolog, и я хочу проверить, есть ли определенный ключ в списке. Структура кода, который я пробую, следующая:

get_assoc (Key, List, Value) - если ключ существует, то сделать это - иначе

Тем не менее, это не работает. Есть ли конкретный способ сделать это?

Автор: ntueder Источник Размещён: 11.08.2019 12:39

Ответы (1)


0 плюса

1114 Репутация автора

Этот предикат может быть использован для проверки существования известного ключа / ключа:

?- list_to_assoc([foo-bar], Assoc),
   get_assoc(foo, Assoc, X).
   X = bar.

?- list_to_assoc([foo-bar], Assoc),
   get_assoc(baz, Assoc, _).
   false.

Если вы хотите сгенерировать все ключи в ассоциации:

?- list_to_assoc([foo-bar, baz-1], Assoc),
   gen_assoc(Key, Assoc, _). % note gen_assoc/3 not get_assoc/3
   Key = foo ;
   Key = baz ;
   false.

Чтобы сделать ассоциацию глобальной, вы можете сделать это фактом, который можно объединить в предикаты, который также может использовать упомянутую вами ветку if / else.

my_assoc(Assoc) :- list_to_assoc([foo-bar], Assoc).
% or my_assoc(t(foo, bar, -, t, t)).

my_predicate(K, V) :-
    my_assoc(Assoc),
    gen_assoc(K, Assoc, V).

my_branching_predicate(Out) :-
    my_assoc(Assoc),
    ( get_assoc(foo, Assoc, _)
    -> Out = "foo exists"
    ; Out = "No Such Key"
    ).
Автор: Paul Brown Размещён: 11.08.2019 06:56
Вопросы из категории :
32x32