Как вернуть список, содержащий определенный элемент в прологе?

#prolog

Вопрос:

Я изучаю пролог, но у меня проблема с кодом. Я хочу проверить, существует ли элемент в списке списков, и если он существует, я хочу получить список, содержащий этот элемент, для управления списком. Я сделал предложение, чтобы доказать, что элемент есть или его нет в списке списков, но я не знаю, как получить этот список, пожалуйста, помогите мне.

 memberlist(X,[H|_]) :-
    member(X,H).
memberlist(X,[_|T2]) :-
  memberlist(X,T2).
 

Я делаю этот запрос:

 memberlist("product1",[["product2", 100, "available"],["product3", 100, "sold out"],["product1", 200, "available"]]).
 

и я получаю: true но также я хочу получить список, содержащий строку "product1" , чтобы результат, который я ищу, был: ["product1", 200, "available"]

Ответ №1:

Как насчет введения третьего аргумента для хранения списка совпадений? например:

 memberlist(X,[H|_],H) :-
  member(X,H).
memberlist(X,[_|T2],Y) :-
  memberlist(X,T2,Y).
 

Пример запроса:

 memberlist("product1", [["product2", 100, "available"],["product3", 100, "sold out"],["product1", 200, "available"]], Result).
 

Приводит к результату:

 Result = ["product1", 200, "available"]