2012-01-05 2 views
0

Мне нужно разработать предикат в Prolog, который сможет сравнить список с фактом. Другими словами, если имена продуктов, находящихся в списке, тоже находятся в базе данных (факт), тогда он должен сказать «да», иначе «нет». Предикат, очевидно, получает список имен продуктов. На данный момент у меня есть этот кусок кода.Контрольный список и база данных [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"]). 
+0

И проблема с тем, что вы написали до сих пор ... что? –

+0

Он работает почти отлично. Единственная проблема заключается в том, что не проверяет все продукты в этом факте. Я имею в виду, содержит ли список меньше продуктов, чем база данных, предикат отвечает также «да». – mkll

ответ

0

Ваш базовый чехол для проверки ищет имя продукта как список, а не как строку.