Я снова застрял с довольно простой задачей Пролога.Я хочу определить предикат kv_search/3
, который принимает список ключей / значений, такой как [[a,1],[b,2],[c,3],[d,4],[e,8],[a,9],[b,10]]
, в качестве первого аргумента, ключ в качестве второго и выводит список всех значений с этим ключом в третьем аргументе.
Мой текущий подход выглядит следующим образом:
kv_find([[K,V|_]|Rest], K, Result) :-
kv_find(Rest, K, [V|Result]).
kv_find([[Ks,_|_]|Rest], K, Result) :-
Ks \= K ,
kv_find(Rest, K, Result).
kv_find([], _, _).
Проблема с этим решением заключается в том, что он просто выводит true или false вместо печати отсутствующего параметра.
Например, следующий результат запроса в true
вместо ожидаемого результата B=[1, 9]
:
kv_find([[a,1],[b,2],[c,3],[d,4],[e,8],[a,9],[b,10]], a, B).
Если ключ отсутствует в списке, я хочу вывести пустой список.