Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Как это будет выглядет на VIP 6.X
Ответ
 
Опции темы Опции просмотра
  (#31 (permalink)) Старый
imported_Black_Dragon imported_Black_Dragon вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.10.2005
По умолчанию 13.10.2005, 14:04

Винитарх
в моем примере:
Код:
clauses
    start() :-
        listi(5,Цвет),
        listi(5,Нац),
        listi(5,Напит),
        listi(5,Сигар),
        listi(5,Животн),
        compare(Цвет,Нац,Напит,Сигар,Животн),
        console::write(Цвет),
        console::write(Нац),
        console::write(Напит),
        console::write(Сигар),
        console::write(Животн),
        !.
    start().
все как "положено", т.е. start является процедурой, а процедура у нас
procedure = {Succeed}, т.е. предикат, который всегда выполняется.
если я вставлю ! где-нибудь перед самым первым выводом (процедурных предикатов), например, между последним listi и compare, то ВИП ругается что start стал determ, а не procedure, но determ = {Fail, Succeed}, т.е. получается что start может и не выполнятся, но у нас второе определение start как раз и дает что всегда будет завершено.
Или я чего то не догоняю?
Ответить с цитированием
  (#32 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,907
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 14.10.2005, 01:02

Black_Dragon пишет:
Цитата:
А чего это они в 6.х такую фишку замутили то?
Ну это отдельная и долгая история. Существенных причин по видимому нет, может даже и вернут кнопочку. Если не лень - поищи, обсуждение подобных вопросов поднималось на форуме этим летом.

Black_Dragon пишет:
Цитата:
если я вставлю ! где-нибудь перед самым первым выводом (процедурных предикатов), например, между последним listi и compare, то ВИП ругается что start стал determ, а не procedure, но determ = {Fail, Succeed}, т.е. получается что start может и не выполнятся, но у нас второе определение start как раз и дает что всегда будет завершено.
Или я чего то не догоняю?
Полагаю, что вина лежит на предикате:
compare(Цвет,Нац,Напит,Сигар,Животн),
Попробуй отсечение поставить после него.

Alison пишет:
Цитата:
VictorY имел в виду советы вроде того, что надо собрать все решения findall'ом и проч.
Я сам про findall думал, но потом решил расписать чуть подробней, подумав, что так будет лучше. Если хочешь - добавь туда пример с findall'ом.
Ответить с цитированием
  (#33 (permalink)) Старый
imported_Black_Dragon imported_Black_Dragon вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.10.2005
По умолчанию 14.10.2005, 06:53

Цитата:
Originally posted by Винитарх
[b]Полагаю, что вина лежит на предикате:
compare(Цвет,Нац,Напит,Сигар,Животн),
Попробуй отсечение поставить после него.
Да я уже вчера догодался почему
Если ! поставить перед (нон)детерменированым предикатом, то при прохождении предиката ! отката назад не будет, а при не успешном выполнении последующих (нон)детерменированых предикатов даст fail, что не приемлемо для типа процедура

тут еще есть вопрос
Код:
dwrite: (rlist,rlist) nondeterm (i,o)
dwrite([0],[0]) :- console::write("-").
dwrite([X],[Y]) :- X <> 0,!,Y = X-1,console::write("0").
dwrite([X|Xs],[Y|Ys]) :- ###dwrite([X],[Y])###,dwrite(Xs,Ys).
когда шаблон задан не anyflow, а (i,o), то компилятор ругается на выделенный фрагмент, что нету такого шаблона (i,[o])
а почему не пойму.
Ответить с цитированием
  (#34 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,907
Сказал(а) спасибо: 2
Поблагодарили 297 раз(а) в 297 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 17.10.2005, 21:36

Правильно ругается. Если второй аргумент является выходным, то зачем Вы ставите скобки?
А вообще, я бы написал так:
Код:
dwrite([0|Xs],[0|Ys]):-!,console::write("-"),dwrite(Xs,Ys).. 
dwrite([X|Xs],[Y|Ys]):-X<>0,!,Y=X-1,console::write("0"),dwrite(Xs,Ys). 
dwrite([],[]).
Ответить с цитированием
  (#35 (permalink)) Старый
imported_Black_Dragon imported_Black_Dragon вне форума
Member
 
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.10.2005
По умолчанию 18.10.2005, 10:56

Цитата:
Originally posted by Винитарх
[b]Правильно ругается. Если второй аргумент является выходным, то зачем Вы ставите скобки?
Немного не понял
Цитата:
А вообще, я бы написал так:
Спасибо
Ответить с цитированием
Ads.
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Blu Ray читать будет? f17 Периферия 3 17.01.2012 22:31
Будет ли 120Гц? RITSU Мониторы 2 20.12.2011 21:30
будет ли все нормально??? Пархоменко Вадим Память 3 22.08.2011 14:17
Будет ли работать?) Lifehacker Подбор комплектующих 1 29.06.2011 22:06
Будет ли работать? Lucky Системный блок 9 04.06.2011 13:55
Будет ли работать? Петька Системный блок 14 09.02.2011 15:59
Что будет лучше? IVladJ Любые вопросы от новичков 7 05.11.2010 14:41
Будет ли работать ? витёк Оценка конфигурации 0 04.10.2010 18:14
Будет ли это работать ? и если будет то как ? Александр3 Любые вопросы от новичков 3 22.09.2010 19:21
что будет если..... Redrik Shuhart Моддинг 4 28.02.2009 22:57
Netscape'а не будет! Кошмар Новости 0 29.12.2007 22:58



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