List 检查表和数据库[Prolog]

List 检查表和数据库[Prolog],list,prolog,fact,List,Prolog,Fact,我需要在Prolog中开发一个谓词,能够将列表与事实进行比较。换句话说,如果列表中的产品名称也都在数据库事实中,那么它必须说是,否则就不是。 谓词显然接收产品名称列表。 目前,我有这段代码 domains state = reduced ; normal element = string list = element* database producte (string, integer, state) predicates nondeterm chec

我需要在Prolog中开发一个谓词,能够将列表与事实进行比较。换句话说,如果列表中的产品名称也都在数据库事实中,那么它必须说是,否则就不是。 谓词显然接收产品名称列表。 目前,我有这段代码

domains
    state =  reduced ; normal
    element = string
    list = element*
database
    producte (string, integer, state)
predicates
    nondeterm check(list)
clauses 
   % ---> producte( description , price , state )
    producte("Enciam",2,normal). 
    producte("Llet",1,reduced). 
    producte("Formatge",5,normal). 
    %unique case
    check([Name]):-
        producte([Name],_,_).
    %general case
    check([D|T]):-
        producte(D,_,_),
        check(T).
Goal
    check(["Enciam","Llet","Formatge"]).

检查的基本情况是将产品名称作为列表而不是字符串进行查找。

到目前为止,您编写的问题是。。。什么?它几乎工作得很好。唯一的问题是,这并不能验证事实上的所有产品。我的意思是,无论列表包含的产品是否少于数据库,谓词都会以yes作为响应。