Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Решение логической задачки на прологе

#prolog


Задача:  


Три друга – Петр, Роман и Сергей учатся на математическом, физическом
и химическом факультетах университета.
Если Петр математик, то Сергей не физик.
Если Роман не физик, то Петр – математик.
Если Сергей не математик, то Роман – химик.


Определите специальность Сергея.

Код: 

domains
    dep=symbol
predicates
    faculty(dep)
    cond1(dep, dep)
    cond2(dep, dep)
    cond3(dep, dep)
    solve(dep, dep, dep) % Peter, Roman, Sergey
clauses
    faculty(physics).
    faculty(math).
    faculty(chemistry).

    cond1(Fa1, Fa3):-
        Fa1=math,
        Fa3<>physics.

    cond2(Fa2, Fa1):-
        Fa2<>physics,
        Fa1=math.

    cond3(Fa3, Fa2):-
        Fa3<>math,
        Fa2=chemistry.

    solve(Fa1, Fa2, Fa3):-
        faculty(Fa1),
        faculty(Fa2),
        faculty(Fa3),
        Fa1<>Fa2,
        Fa2<>Fa3,
        Fa1<>Fa3,
        cond1(Fa1, Fa3);
        cond2(Fa2, Fa1);
        cond3(Fa3, Fa2).


При запуске данного кода выскакивает следующая ошибка:



Как можно исправить данную ошибку и есть ли у этой задачки какое-либо другое решение
на прологе?
Ответ у задачки должен быть такой: Петр - химик, Роман - физик, Сергей - математик
    


Ответы

Ответ 1



Используй вместо <> конструкцию not(a=b). domains dep=symbol predicates faculty(dep) cond1(dep, dep) cond2(dep, dep) cond3(dep, dep) solve(dep, dep, dep) % Peter, Roman, Sergey clauses faculty(physics). faculty(math). faculty(chemistry). cond1(Fa1, Fa2):- Fa1=math, not(Fa2=physics). cond1(Fa1, _):- not(Fa1=math). cond2(Fa1, Fa2):- not(Fa1=physics), Fa2=math. cond2(physics, _). cond3(Fa1, Fa2):- not(Fa1=math), Fa2=chemistry. cond3(math, _). solve(Fa1, Fa2, Fa3):- faculty(Fa1), faculty(Fa2), faculty(Fa3), Fa1<>Fa2, Fa2<>Fa3, Fa1<>Fa3, cond1(Fa1, Fa3), cond2(Fa2, Fa1), cond3(Fa3, Fa2). goal solve(Fa1, Fa2, Fa3), write(Fa1),nl, write(Fa2),nl, write(Fa3).

Комментариев нет:

Отправить комментарий