Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Блестящие офицеры
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Анди Анди вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.10.2011
По умолчанию Блестящие офицеры - 26.10.2011, 19:17

При проверке выдает "E;Test_Goal, pos: 4124, 603 Too many variables in this clause".

Вот код программы. Хотелось бы знать - в чем ошибка.
/************************************************** ***************************
Copyright (c) My Company
Project: OFFIC
FileName: OFFIC.PRO
Purpose: No description
Written by: Visual Prolog
Comments:
На одном вечере среди гостей оказалось пять офицеров: пехотинец, артиллерист, летчик, связист и сапер.
Один из них был капитаном, трое — майорами и один — в звании подполковника.
Дамы окружили офицеров таким вниманием, что все остальные гости оказались просто забытыми.
Из разговоров удалось выяснить следующее:
1) у Яноша такое же звание, как и у его друга сапера;
2) офицер-связист и Ференц — большие друзья;
3) офицер-летчик вместе с Белой и Лайошем недавно побывали в гостях у Ференца;
4) незадолго до званого вечера у артиллериста и сапера почти одновременно вышли из строя радиоприемники.
Оба в один день обратились к Лайошу с просьбой зайти к ним и помочь связисту устранить
неисправность и не ошиблись, поскольку с тех пор приемники у обоих работают отлично;
5) Ференц чуть было не стал летчиком, но потом по совету своего друга сапера избрал иной род войск;
6) Янош по званию старше Лайоша, а Бела старше Ференца;
7) пятый офицер, Андраш, накануне вечера был в гостях у Лайоша.
Определите звание каждого офицера и род войск, в котором он служит.
************************************************** ****************************/
/*
пехотинец Лайош капитан
артиллерист Ференц майор
лётчик Янош майор
связист Бела подполковник
сапер Андраш майор
*/
include "offic.inc"


predicates
nondeterm resh
name (string)
zvanie (string)
rod (string)
soot (string,string,string)
resh (string,string,string,string,string,string,string, string,string,string,string,string,string,string,s tring)

clauses
name("Янош").
name("Ференц").
name("Бела").
name("Лайош").
name("Андраш").
zvanie("подполковник").
zvanie("майор").
zvanie("майор").
zvanie("майор").
zvanie("капитан").
rod("летчик").
rod("сапер").
rod("связист").
rod("артиллерист").
rod("пехотинец").
% Решение: X – имя, Y – звание, Z – род войск
% Из условия 1 и 6 Янош - майор и не сапер
soot(X,Y,Z):-name(X),zvanie(Y),rod(Z), X="Янош", Y="майор", Z <> "сапер".
% Из условия 3 - Бела, Ференц и Лайош не летчики
soot(X,Y,Z):-name(X),zvanie(Y),rod(Z), X="Ференц", Y <> "капитан", Y <> "подполковник", Z <> "летчик", Z <> "сапер", Z <> "связист", Z <> "пехотинец".
% Из условия 5
% Из условия 6 Лайош - капитан. Из условия 4 он не артиллерист, не сапер, не связист.
soot(X,Y,Z):-name(X),zvanie(Y),rod(Z), X="Лайош", Y = "капитан", not (Z = "летчик"), not (Z = "артиллерист"), not (Z = "сапер"), not (Z = "связист").
soot(X,Y,Z):-name(X),zvanie(Y),rod(Z), X="Бела", not (Y = "капитан"), not (Y = "майор"), not (Z = "летчик"), not (Z = "пехотинец"), not (Z = "артиллерист"), not (Z = "сапер").
soot(X,Y,Z):-name(X),zvanie(Y),rod(Z), X="Андраш", not (Y = "капитан"), not (Y = "подполковник"), not (Z = "летчик"), not (Z = "пехотинец"), not (Z = "артиллерист"), not (Z = "связист").

resh(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,X4,Y4,Z4,X5,Y5,Z5) :-
X1="Янош",soot(X1,Y1,Z1),
X2="Ференц", soot(X2,Y2,Z2),
X3="Бела", soot(X3,Y3,Z3),
X4="Лайош", soot(X4,Y4,Z4),
X5="Андраш", soot(X5,Y5,Z5),
%Y1<>Y2, Y1<>Y3, Y1<>Y4, Y1<>Y5,
%Y2 = Y3, Y2 = Y4, Y2 <> Y5,
%Y3 = Y4, Y3<>Y5, Y4 <> Y5,
Z1<>Z2, Z1<>Z3, Z1<>Z4,Z1<>Z5,
Z2<>Z3, Z2<>Z4, Z2<>Z5,
Z3<>Z4, Z3<>Z5, Z4<>Z5.

goal

resh (X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,X4,Y4,Z4,X5,Y5,Z5),
write(X1," звание - ",Y1," род - ",Z1),nl,
write(X2," звание - ",Y2," род - ",Z2),nl,
write(X3," звание - ",Y3," род - ",Z3),nl,
write(X4," звание - ",Y4," род - ",Z4),nl,
write(X5," звание - ",Y5," род - ",Z5),nl.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов