首页 > 解决方案 > 如何在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"]

标签: prolog

解决方案


引入第三个参数来存储匹配列表怎么样?例如:

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"]

推荐阅读