Логическая Задача

Тема в разделе "Другие", создана пользователем -, 22 окт 2011.

  1. Гость

    Помогите пожалуйста. Используя отсечение, неуспех и отрицание, написать программу на Prolog:

    На заводе работали три друга: слесарь, токарь и сварщик. Их фамилии Борисов, Иванов и Семенов. У слесаря нет ни братьев, ни сестер. Он самый младший из друзей. Семенов, женатый на сестре Борисова, старше токаря. Назвать фамилии слесаря, токаря и сварщика.

    Решение есть: Семенов - сварщик, Борисов - токарь, Иванов - слесарь. Но на Prolog не получается никак, помогите, кто может.
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    попытки решить самостоятельно были? - если нет - помогу только за материальное вознаграждение.
     
  3. Гость

    Попытки были, вот то что получилось:

    Код на Prolog

    domains
    imya=string
    imeet_sestru=string
    starshe_tokarya=string

    class predicates // в этой строчке выдает 302 ошибку: Name of class expected.
    professii (string, string, string)

    nondeterm (o,o,o)

    clauses
    imya("Borisov").
    imya("Ivanov").
    imya("Semenov").

    imeet_sestru("Borisov").

    starshe_tokarya("Semenov").

    professii(Slesar, Tokar, Svarshik):-
    imya(Slesar),
    imya(Tokar), Tokar <> Slesar,
    imya(Svarshik), Svarshik <> Tokar, Svarshik <> Slesar,
    not(imeet_sestru(Slesar)),
    not(starshe_tokarya(Slesar)),
    not(starshe_tokarya(Tokar)).

    run():-
    professii(Slesar, Tokar, Svarshik),
    writef("% - slesar, % - tokar, % - svarshik\n",
    Slesar, Tokar, Svarshik),
    fail;
    _ = readLine().


    Из-за чего эта ошибка?
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    какой диалект пролога используете?

    Добавлено: судя по "class predicates" и "nondeterm (o,o,o)" - visual prolog, скорее всего 5 версии.
    Но если это visual prolog -То должен быть раздел goal, которого нет.

    Добавлено:
    Код (Text):
    domains
    imya=string
    в разделе domains объявляют типы данных, в результате объявления, приведенного выше imya стало синонимом string.
    А чтобы писать вот так:
    Код (Text):
    imya("Borisov").
    надо было объявить imya в разделе database или facts( если на Visual) или в разделе predicetes( если на Turbo).
    объявить примерно так:
    Код (Text):
    imya(string)
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    predicates
    professii (string, string, string)
    imya( string )
    imeet_sestru( string )
    starshe_tokarya( string )

    clauses
    imya("Borisov").
    imya("Ivanov").
    imya("Semenov").

    imeet_sestru("Borisov").

    starshe_tokarya("Semenov").

    professii(Slesar, Tokar, Svarshik):-
    imya(Slesar),
    imya(Tokar), Tokar <> Slesar,
    imya(Svarshik), Svarshik <> Tokar, Svarshik <> Slesar,
    not(imeet_sestru(Slesar)),
    not(starshe_tokarya(Slesar)),
    not(starshe_tokarya(Tokar)).
    goal
    professii(Slesar, Tokar, Svarshik),
    write(Slesar," - slesar\n", Tokar, " - tokar\n", Svarshik, " - svarshik\n" ),readInt(_);
    write("error"),nl,readInt(_)
    поправил, хотя...мне чето не нравится решение )
     
  6. Гость

    Да, я использую Visual Prolog 5 версии. Не думал что из за этого может быть ошибка.

    r04, спасибо большое за помощь.
     
Загрузка...
Похожие Темы - Логическая Задача
  1. rrrFer
    Ответов:
    12
    Просмотров:
    1.467
  2. mirkul
    Ответов:
    10
    Просмотров:
    2.312
  3. Янчик
    Ответов:
    0
    Просмотров:
    472
  4. TrishaRay
    Ответов:
    1
    Просмотров:
    778
  5. elzim
    Ответов:
    0
    Просмотров:
    929

Поделиться этой страницей