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

Помогите, пожалуйста. Дана задача
Три клоуна Бим, Бам и Бом вышли на арену в красной, зеленой и синей рубашках. Их туфли были тех же цветов. У Бима цвета рубашки и туфель совпадали. У Бома ни туфли, ни рубашка не были красными. Бам был в зеленых туфлях, а в рубашке другого цвета. Как были одеты клоуны?
Написала решение (VIP 7.4), но результат на экран не выводит. Что не так?

Visual Prolog Код:
implement main
    open core, console

class predicates
name: (string) determ (i) /* multi (o)*/ .
shoes: (string) /*determ (i) */ multi (o).
shirt: (string) determ (i) multi (o).
relation: (string Name1, string Shoes1, string Shirt1) nondeterm (i,o,o).
solution: (string Name1, string Shoes1, string Shirt1, string Name2, string Shoes2, string Shirt2, string Name3, string Shoes3, string Shirt3) nondeterm  (o,o,o,o,o,o,o,o,o).

clauses
name("бим").
name("бам").
name("бом").

shoes("красные").
shoes("зеленые").
shoes("синие").

shirt("красная").
shirt("зеленая").
shirt("синяя").

relation(X,Y,Z):- name(X), X="бим", shoes(Y), shirt(Z), Z=Y, !.
relation(X,Y,Z):- name(X), X="бам", Z="зеленая", shoes(Y), shirt(Z), Z<>Y, !.
relation(X,Y,Z):- name(X), X="бом", shoes(Y), shirt(Z), not(Y="красные"), not(Z="красная").

solution("бим", Y1,Z1, "бам", Y2,Z2,"бом", Y3,Z3):-
    relation("бим", Y1,Z1),relation("бам", Y2,Z2),relation("бом", Y3,Z3),
    Y1<>Y2, Y2<>Y3, Y1<>Y3,
    Z1<>Z2, Z2<>Z3, Z1<>Z3.

clauses
    run():-
       init(),
       solution (X1, Y1,Z1, X2, Y2,Z2,X3, Y3,Z3),
       write("клоун % одет в туфли % и рубашку %", X1, Y1,Z1), nl,
       write("клоун % одет в туфли % и рубашку %", X2, Y2,Z2), nl,
       write("клоун % одет в туфли % и рубашку %", X3, Y3,Z3), nl,
        console::clearInput(),
        _=readline(),
        !;
       succeed().
end implement main

goal
    mainExe::run(main::run).
Ответить с цитированием
  (#2 (permalink)) Старый
Винитарх Винитарх на форуме
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,838
Сказал(а) спасибо: 2
Поблагодарили 285 раз(а) в 285 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 05.10.2014, 20:14

Нет вывода, так как решение неправильное (и ужасное). Можно написать в 2 раза короче.
Я подправил, чтоб заработало, но весь ужас внутри остался:
Visual Prolog Код:
class predicates
name: (string) determ (i).
shoes: (string) multi (o).
shirt: (string) multi (o).
relation: (string Name1, string Shoes1, string Shirt1) nondeterm (i,o,o).
solution: (string Name1, string Shoes1, string Shirt1, string Name2, string Shoes2, string Shirt2, string Name3, string Shoes3, string Shirt3) nondeterm  (o,o,o,o,o,o,o,o,o).

clauses
name("бим").
name("бам").
name("бом").

shoes("красн").
shoes("зелен").
shoes("син").

shirt("красн").
shirt("зелен").
shirt("син").

relation(X,Y,Z):- name(X), X="бим", shoes(Y), shirt(Z), Z=Y.
relation(X,Y,Z):- name(X), X="бам", Y="зелен", shirt(Z), Z<>Y.
relation(X,Y,Z):- name(X), X="бом", shoes(Y), shirt(Z), not(Y="красн"), not(Z="красн").

solution("бим", Y1,Z1, "бам", Y2,Z2,"бом", Y3,Z3):-
    relation("бим", Y1,Z1),relation("бам", Y2,Z2),relation("бом", Y3,Z3),
    Y1<>Y2, Y2<>Y3, Y1<>Y3,
    Z1<>Z2, Z2<>Z3, Z1<>Z3.

clauses
    run():-
       init(),
       solution (X1, Y1,Z1, X2, Y2,Z2,X3, Y3,Z3),
       writef("клоун % одет в туфли % и рубашку %", X1, Y1,Z1), nl,
       writef("клоун % одет в туфли % и рубашку %", X2, Y2,Z2), nl,
       writef("клоун % одет в туфли % и рубашку %", X3, Y3,Z3), nl,
        console::clearInput(),
        _=readline(),
        !;
       write("Что-то не так"),
       _=readchar().
Ответить с цитированием
  (#3 (permalink)) Старый
Винитарх Винитарх на форуме
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,838
Сказал(а) спасибо: 2
Поблагодарили 285 раз(а) в 285 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 05.10.2014, 20:18

Вот немного причесал тот самый ужас:
Visual Prolog Код:
class predicates
shoes: (string) multi (o).
shirt: (string) multi (o).
relation: (string Name1, string Shoes1, string Shirt1) nondeterm (i,o,o).
solution: (string Name1, string Shoes1, string Shirt1, string Name2, string Shoes2, string Shirt2, string Name3, string Shoes3, string Shirt3) nondeterm  (o,o,o,o,o,o,o,o,o).

clauses
shoes("красн").
shoes("зелен").
shoes("син").

shirt("красн").
shirt("зелен").
shirt("син").

relation("бим",Y,Z):- shoes(Y), shirt(Z), Z=Y.
relation("бам",Y,Z):- Y="зелен", shirt(Z), Z<>Y.
relation("бом",Y,Z):- shoes(Y), shirt(Z), not(Y="красн"), not(Z="красн").

solution("бим", Y1,Z1, "бам", Y2,Z2,"бом", Y3,Z3):-
    relation("бим", Y1,Z1),relation("бам", Y2,Z2),relation("бом", Y3,Z3),
    Y1<>Y2, Y2<>Y3, Y1<>Y3,
    Z1<>Z2, Z2<>Z3, Z1<>Z3.

clauses
    run():-
       init(),
       solution (X1, Y1,Z1, X2, Y2,Z2,X3, Y3,Z3),
       writef("клоун % одет в туфли % и рубашку %", X1, Y1,Z1), nl,
       writef("клоун % одет в туфли % и рубашку %", X2, Y2,Z2), nl,
       writef("клоун % одет в туфли % и рубашку %", X3, Y3,Z3), nl,
        console::clearInput(),
        _=readline(),
        !;
       write("Что-то не так"),
       _=readchar().
Ответить с цитированием
Пользователь сказал cпасибо:
ee17 (05.10.2014)
  (#4 (permalink)) Старый
ee17 ee17 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.10.2014
По умолчанию 05.10.2014, 20:20

Спасибо большое, я только учусь(((
Ответить с цитированием
  (#5 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,771
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 06.10.2014, 01:10

Все-таки clearInput здесь не нужен и отсечение тоже. Нужен fail, чтобы честно находились все решения, если их больше одного, или было видно, что с решением что-то не так, если заранее известно, что оно единственное:
Visual Prolog Код:
clauses
    run():-
       init(),
       solution (X1, Y1,Z1, X2, Y2,Z2,X3, Y3,Z3),
       writef("клоун % одет в туфли % и рубашку %\n", X1, Y1,Z1),
       writef("клоун % одет в туфли % и рубашку %\n", X2, Y2,Z2),
       writef("клоун % одет в туфли % и рубашку %\n\n", X3, Y3,Z3),
       fail;      
        _=readline().
Ответить с цитированием
Пользователь сказал cпасибо:
ee17 (14.10.2014)
Ads.
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводится изображение на монитор Portable Любые вопросы от новичков 3 04.05.2014 14:52
При загрузке ОС выводится информация: EgisPLTSR.exe Gorod71 Любые вопросы от новичков 2 23.03.2014 06:38
не выводится изображение на монитор DiMM@ Мониторы 3 09.03.2013 17:11
Не выводится изображение на монитор. kmalex Любые вопросы от новичков 20 11.12.2011 22:38
не выводится результат rinat1980 Visual Basic 2 08.12.2011 19:00
Не выводится изображение на монитор Asus VW193DR CB9ITOU Любые вопросы от новичков 6 03.03.2011 11:46
Некоретно выводится в броузер результат запроса usik PHP 2 23.09.2008 17:36
Почему выводится 65532 вместо -4 kr0nix Assembler 4 12.12.2007 01:31
Окно Edit, в которое выводится результирующее значение RAPIST C++ Builder 3 11.07.2007 15:25
Инфа с таблиц, выводится не в том порядке! russel-shf PHP 2 24.01.2005 09:40
В браузер выводится текст программы. Помогите.... mAhr PHP 14 15.06.2004 08:29
Почему не выводится диалог в программе CFileDialog mak8 Visual C++ 2 26.06.2003 16:31



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