2015-09-21 3 views
3

я хочу описать в прологе следующие факты и правила:Пролог - Опишите факты и правила

  1. Ник программирования на Java.
  2. Ник программирование в Python
  3. Ник друг с кем-либо, что является программирование на Java и Python
  4. Джим программирование на всех языках, что Ник делает.

Я нашел решение для 1, 2 и 3, но не для 4-го, хотя я действительно был бы признателен за полное решение.

Мое решение:

male(Nick). 

male(Jim). 

programming(Nick, java). 

programming(Nick, python). 

friends(X,Y):- 
    programming(X,java), 
    programming(X,python), 
    programming(Y,java), 
    programming(Y,python), 

ответ

3

Есть несколько ошибок в вашем решении:

  • константа (например, Nick), начиная с буквы в нет постоянной; а переменная. Таким образом, линия:

    male(Nick). 
    

    говорит, что все являются male/1; Вы должны исправить его:

    male(nick). 
    male(jim). 
    

    (то же самое для programming/2, кстати). , кроме того, это не является частью задания (?).

  • Предикат friends/2 с запятой (,) означает, что анализатор Prolog ожидает большего ввода и увидит следующий факт как часть текущего предложения; вы должны заканчивать предложения точкой (.);

  • friends/2 предикат не семантически корректным, так как вопрос только делает заявления о Нике: вы, таким образом, не может использовать X как личность, вы должны специализироваться это нравится:

    friends(nick,Y):- 
        programming(Y,java), 
        programming(Y,python). 
    

    Ваша версия friends/2 сказал: «Человек X - друг человека Y, если оба X и Y могут программировать на Java и Python«; хотя это приводит к тому, что Ник - друг каждого, кто работает на Java и Python, ваши утверждения более широкие, чем то, что должно быть разрешено: мы не знаем, может ли Джим решить, кто с ним дружит на основе этих правил. Это, например, возможно (хотя, возможно, и не так), что Джим хочет узнать что-то у своих друзей и, например, только друзья с людьми, которые знают хотя бы один язык программирования, которого он не осваивает.

  • Последний вопрос можно записать в виде:

    programming(jim,X) :- 
        programming(nick,X). 
    

    почти механический перевод утверждения: «Джим программирования в X если ник программирования в X»; (разумеется, это не if-and-only-if); поэтому вы можете добавить дополнительные языки, с которыми может работать Джим.

+0

спасибо! Я использовал Capital Letter по ошибке, и запятая была там из-за «copy-paste». Поэтому, исправляя ошибки и добавляя последнюю часть кода, я отвечаю на все 4 вопроса правильно? – ChrisK

+1

Да, я просто видел, круто, очень полезно, спасибо снова! – ChrisK

Смежные вопросы