Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Как можно избавиться от "отсечения"?
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
JHK JHK вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2007
По умолчанию 19.12.2007, 20:56

Доброго времени суток.
Дана задача:
Циклический сдвиг элементов списка вправо на N элементов (Turbo Prolog).

Первый вариант решения, с использованием отсечения:
Код:
domains
IntList = Integer*
predicates  
readlist(IntList)
cikl_sdv(Integer,IntList,IntList)
get_last(IntList,IntList,Integer)

goal 
write("\nVvedite list\n"),
readlist(List), 
write("\nVvedite sdvig\n"),
readint(I),
cikl_sdv(I,List,_List1),
write ("\n Sdvinutiy List",_List1).

clauses
cikl_sdv(_,[],[]):-!.
cikl_sdv(0,List,List):-!.
cikl_sdv(K,List,List0):-get_last(List,List1,Last),
    K1=K-1,!,cikl_sdv(K1,[Last|List1],List0).
get_last([M],[],M):-!.
get_last([M|List],[M|List1],Last):-get_last(List,List1,Last).
readlist([H|T]):-readint(H),!,readlist(T). readlist([]).
Второй, с использованием bound:
Код:
domains
IntList = Integer*
predicates  
readlist(IntList)
cikl_sdv(Integer,IntList,IntList)
get_last(IntList,IntList,Integer)

goal 
write("\nVvedite list\n"),
readlist(List), 
write("\nVvedite sdvig\n"),
readint(I),
cikl_sdv(I,List,_List1),
write ("\n Sdvinutiy List",_List1).

clauses
cikl_sdv(0,List,List):-bound(List).
cikl_sdv(K,List,List0):-get_last(List,List1,Last),
    K1=K-1,cikl_sdv(K1,[Last|List1],List0).
get_last([M],[],M):-bound(M).
get_last([M|List],[M|List1],Last):-get_last(List,List1,Last).
readlist([H|T]):-readint(H),readlist(T). readlist([]).
Но суть проблемы заключается в том что нельзя использовать ни отсечение ни bound, надо сделать все "в ручную" не используя встроеные функции. Облазил инет ни чего внятного по этому поводу ни нашел, везде используется отсечение. Помогите пожалуйста.

Есть мысли, что надо написать собственный предикат дублирующий ! или bound, но как это сделать, вот в чем вопрос.
Ответить с цитированием
  (#2 (permalink)) Старый
JHK JHK вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2007
По умолчанию 19.12.2007, 20:56

Доброго времени суток.
Дана задача:
Циклический сдвиг элементов списка вправо на N элементов (Turbo Prolog).

Первый вариант решения, с использованием отсечения:
Код:
domains
IntList = Integer*
predicates  
readlist(IntList)
cikl_sdv(Integer,IntList,IntList)
get_last(IntList,IntList,Integer)

goal 
write("\nVvedite list\n"),
readlist(List), 
write("\nVvedite sdvig\n"),
readint(I),
cikl_sdv(I,List,_List1),
write ("\n Sdvinutiy List",_List1).

clauses
cikl_sdv(_,[],[]):-!.
cikl_sdv(0,List,List):-!.
cikl_sdv(K,List,List0):-get_last(List,List1,Last),
    K1=K-1,!,cikl_sdv(K1,[Last|List1],List0).
get_last([M],[],M):-!.
get_last([M|List],[M|List1],Last):-get_last(List,List1,Last).
readlist([H|T]):-readint(H),!,readlist(T). readlist([]).
Второй, с использованием bound:
Код:
domains
IntList = Integer*
predicates  
readlist(IntList)
cikl_sdv(Integer,IntList,IntList)
get_last(IntList,IntList,Integer)

goal 
write("\nVvedite list\n"),
readlist(List), 
write("\nVvedite sdvig\n"),
readint(I),
cikl_sdv(I,List,_List1),
write ("\n Sdvinutiy List",_List1).

clauses
cikl_sdv(0,List,List):-bound(List).
cikl_sdv(K,List,List0):-get_last(List,List1,Last),
    K1=K-1,cikl_sdv(K1,[Last|List1],List0).
get_last([M],[],M):-bound(M).
get_last([M|List],[M|List1],Last):-get_last(List,List1,Last).
readlist([H|T]):-readint(H),readlist(T). readlist([]).
Но суть проблемы заключается в том что нельзя использовать ни отсечение ни bound, надо сделать все "в ручную" не используя встроеные функции. Облазил инет ни чего внятного по этому поводу ни нашел, везде используется отсечение. Помогите пожалуйста.

Есть мысли, что надо написать собственный предикат дублирующий ! или bound, но как это сделать, вот в чем вопрос.
Ответить с цитированием
  (#3 (permalink)) Старый
JHK JHK вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2007
По умолчанию 19.12.2007, 20:56

Доброго времени суток.
Дана задача:
Циклический сдвиг элементов списка вправо на N элементов (Turbo Prolog).

Первый вариант решения, с использованием отсечения:
Код:
domains
IntList = Integer*
predicates  
readlist(IntList)
cikl_sdv(Integer,IntList,IntList)
get_last(IntList,IntList,Integer)

goal 
write("\nVvedite list\n"),
readlist(List), 
write("\nVvedite sdvig\n"),
readint(I),
cikl_sdv(I,List,_List1),
write ("\n Sdvinutiy List",_List1).

clauses
cikl_sdv(_,[],[]):-!.
cikl_sdv(0,List,List):-!.
cikl_sdv(K,List,List0):-get_last(List,List1,Last),
    K1=K-1,!,cikl_sdv(K1,[Last|List1],List0).
get_last([M],[],M):-!.
get_last([M|List],[M|List1],Last):-get_last(List,List1,Last).
readlist([H|T]):-readint(H),!,readlist(T). readlist([]).
Второй, с использованием bound:
Код:
domains
IntList = Integer*
predicates  
readlist(IntList)
cikl_sdv(Integer,IntList,IntList)
get_last(IntList,IntList,Integer)

goal 
write("\nVvedite list\n"),
readlist(List), 
write("\nVvedite sdvig\n"),
readint(I),
cikl_sdv(I,List,_List1),
write ("\n Sdvinutiy List",_List1).

clauses
cikl_sdv(0,List,List):-bound(List).
cikl_sdv(K,List,List0):-get_last(List,List1,Last),
    K1=K-1,cikl_sdv(K1,[Last|List1],List0).
get_last([M],[],M):-bound(M).
get_last([M|List],[M|List1],Last):-get_last(List,List1,Last).
readlist([H|T]):-readint(H),readlist(T). readlist([]).
Но суть проблемы заключается в том что нельзя использовать ни отсечение ни bound, надо сделать все "в ручную" не используя встроеные функции. Облазил инет ни чего внятного по этому поводу ни нашел, везде используется отсечение. Помогите пожалуйста.

Есть мысли, что надо написать собственный предикат дублирующий ! или bound, но как это сделать, вот в чем вопрос.
Ответить с цитированием
  (#4 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 20.12.2007, 16:58

Для того, чтобы избавиться от отсечений надо описать ЯВНО все условия. Попробуйте.
Ответить с цитированием
  (#5 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 20.12.2007, 16:58

Для того, чтобы избавиться от отсечений надо описать ЯВНО все условия. Попробуйте.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 20.12.2007, 16:58

Для того, чтобы избавиться от отсечений надо описать ЯВНО все условия. Попробуйте.
Ответить с цитированием
  (#7 (permalink)) Старый
JHK JHK вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2007
По умолчанию 21.12.2007, 19:00

ммм, это понятно, а как это сделать, можно какойнить пример?
Ответить с цитированием
  (#8 (permalink)) Старый
JHK JHK вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2007
По умолчанию 21.12.2007, 19:00

ммм, это понятно, а как это сделать, можно какойнить пример?
Ответить с цитированием
  (#9 (permalink)) Старый
JHK JHK вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2007
По умолчанию 21.12.2007, 19:00

ммм, это понятно, а как это сделать, можно какойнить пример?
Ответить с цитированием
  (#10 (permalink)) Старый
akvilon akvilon вне форума
Member
 
Сообщений: 135
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.09.2004
По умолчанию 21.12.2007, 19:30

На форуме примеры есть как от сечения избавляться.
Например:
http://www.hardforum.ru/t76078
Ответить с цитированием
Ads
  (#11 (permalink)) Старый
akvilon akvilon вне форума
Member
 
Сообщений: 135
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.09.2004
По умолчанию 21.12.2007, 19:30

На форуме примеры есть как от сечения избавляться.
Например:
http://www.hardforum.ru/t76078
Ответить с цитированием
  (#12 (permalink)) Старый
akvilon akvilon вне форума
Member
 
Сообщений: 135
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 11.09.2004
По умолчанию 21.12.2007, 19:30

На форуме примеры есть как от сечения избавляться.
Например:
http://www.hardforum.ru/t76078
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появилось окно с ошибкой: "Insert the "Tray App" disk and click OK". Anita_2 Техническая поддержка 6 14.12.2014 14:20
Ставлю систему "с нуля" после сбоя. Какие "работы" по тестированию железа полезны? russcand Любые вопросы от новичков 14 01.09.2011 00:27
кау избавиться от "мусора" оставленных удаленными программами? anton682 Любые вопросы от новичков 10 03.04.2010 00:08
Инструкция по адресу "0x436b10f" обратилась к памяти "0x03793dac". ВИРУС???? skazka Windows XP 5 21.03.2010 01:21
Как исправить "attempt to store duplicate value in unique index "RDB$INDEX_5" ?" devo4ka-nimfetka Другие СУБД 1 16.04.2009 09:58
После подключения кнопок "power" и "reset" компьютер перестал включаться. Лаборант-Шурупов Любые вопросы от новичков 1 25.01.2009 15:15
как "избавиться" от пользовательской панели инструментов VictorM Visual Basic 1 02.07.2007 23:35
Добавить кнопки "свернуть" и "восстановить" к окну готового dialog-based приложения Lesat Visual C++ 2 07.01.2006 04:34
Как сделать чтобы вместо кнопок "Да" и "Нет" высвечивалось украинсие "Так" и "Ні" Форсаж Delphi 5 19.07.2003 19:30



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