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

Помогите пожалуйста. Если задаваемая пара элементов является в дереве соседними (т.е. состоят в отношении «родитель – ближайший потомок»), тогда поменять их местами.
Ответить с цитированием
  (#2 (permalink)) Старый
Elenka79 Elenka79 вне форума
Member
 
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.03.2006
По умолчанию 26.04.2006, 12:46

Возможно можно сделать легче. Но я только так:
Код:
domains
tree =empty; tree(integer,tree,tree)

predicates
nondeterm замена(tree,integer,integer,tree)

goal замена(tree(5,tree(4,tree(5,empty,empty),tree(7,empty,empty)),tree(3,tree(11,tree(5,tree(4,empty,empty),tree(5,empty,empty)),empty),empty)),5,4,X).

clauses
замена(empty,_,_,empty). 
замена(tree(X,tree(Y,L,R),RA),X,Y,tree(Y,tree(X,L1,R1),RA)):-!,
                                       замена(L,X,Y,L1),замена(R,X,Y,R1).
замена(tree(X,LE,tree(Y,L,R)),X,Y,tree(Y,LE,tree(X,L1,R1))):-!,
                                       замена(L,X,Y,L1),замена(R,X,Y,R1).
замена(tree(K,L,R),X,Y,tree(K,L1,R1)):-
                                       замена(L,X,Y,L1),замена(R,X,Y,R1).
Дерево можно покрасивее придумать))
Ответить с цитированием
  (#3 (permalink)) Старый
Isav Isav вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2006
По умолчанию 26.04.2006, 17:47

Для чего нужен nondeterm?
Ответить с цитированием
  (#4 (permalink)) Старый
Elenka79 Elenka79 вне форума
Member
 
Сообщений: 115
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.03.2006
По умолчанию 27.04.2006, 08:47

Честно говоря, я сама не совсем понимаю когда предикат детерминированный, а когда нет((
В этой программе можно убрать nondeterm и без него работает...
Вообще nondeterm используют когда предикат может принимать несколько значений.
Ответить с цитированием
  (#5 (permalink)) Старый
Isav Isav вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2006
По умолчанию 28.04.2006, 18:28

Большое спасибо тебе Алена, и все тем кто заходил сюда.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Isav Isav вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2006
По умолчанию 02.05.2006, 13:14

А почему он незаменяет правую ветвь?
Ответить с цитированием
  (#7 (permalink)) Старый
Alison Alison вне форума
Member
 
Сообщений: 4,781
Сказал(а) спасибо: 0
Поблагодарили 119 раз(а) в 116 сообщениях
Регистрация: 17.11.2004
По умолчанию 02.05.2006, 21:24

Главное, что Вам показали принцип. А остальное Вы вполне могли бы сделать самостоятельно.
Код:
domains
tree = empty; tree(integer,tree,tree)
predicates
замена(tree,integer,integer,tree)
goal 
Tree=tree(5,tree(4,tree(5,empty,empty),tree(7,empty,empty)),tree(3,tree(11,tree(5,tree(4,empty,empty),tree(5,empty,empty)),empty),empty)),
замена(Tree,5,4,X).
clauses
замена(empty,_,_,empty).
замена(tree(X,tree(Y,L,R),tree(Y,LE,RA)),X,Y,tree(Y,tree(X,L1,R1),tree(X,LE1,RA1))):- !,
    замена(L,X,Y,L1),замена(R,X,Y,R1),замена(LE,X,Y,LE1),замена(RA,X,Y,RA1).
замена(tree(X,tree(Y,L,R),RA),X,Y,tree(Y,tree(X,L1,R1),RA1)):- !,
    замена(L,X,Y,L1),замена(R,X,Y,R1),замена(RA,X,Y,RA1).
замена(tree(X,LE,tree(Y,L,R)),X,Y,tree(Y,LE1,tree(X,L1,R1))):- !,
    замена(L,X,Y,L1),замена(R,X,Y,R1),замена(LE,X,Y,LE1).
замена(tree(K,L,R),X,Y,tree(K,L1,R1)):- замена(L,X,Y,L1),замена(R,X,Y,R1).
Ответить с цитированием
  (#8 (permalink)) Старый
Isav Isav вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2006
По умолчанию 03.05.2006, 09:42

Большое спасибо. Alison вы мне очень помогли.
Ответить с цитированием
  (#9 (permalink)) Старый
Isav Isav вне форума
Member
 
Сообщений: 21
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.03.2006
По умолчанию 03.05.2006, 09:44

Большое спасибо. Alenka79 вы мне очень помогли.
Ответить с цитированием
  (#10 (permalink)) Старый
misha11 misha11 вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.10.2014
По умолчанию 23.10.2014, 19:30

Цитата:
Сообщение от Alison Посмотреть сообщение
Главное, что Вам показали принцип. А остальное Вы вполне могли бы сделать самостоятельно.
Код:
domains
tree = empty; tree(integer,tree,tree)
predicates
замена(tree,integer,integer,tree)
goal 
Tree=tree(5,tree(4,tree(5,empty,empty),tree(7,empty,empty)),tree(3,tree(11,tree(5,tree(4,empty,empty),tree(5,empty,empty)),empty),empty)),
замена(Tree,5,4,X).
clauses
замена(empty,_,_,empty).
замена(tree(X,tree(Y,L,R),tree(Y,LE,RA)),X,Y,tree(Y,tree(X,L1,R1),tree(X,LE1,RA1))):- !,
 замена(L,X,Y,L1),замена(R,X,Y,R1),замена(LE,X,Y,LE1),замена(RA,X,Y,RA1).

замена(tree(X,tree(Y,L,R),RA),X,Y,tree(Y,tree(X,L1,R1),RA1)):- !,
    замена(L,X,Y,L1),замена(R,X,Y,R1),замена(RA,X,Y,RA1).

замена(tree(X,LE,tree(Y,L,R)),X,Y,tree(Y,LE1,tree(X,L1,R1))):- !,
    замена(L,X,Y,L1),замена(R,X,Y,R1),замена(LE,X,Y,LE1).

замена(tree(K,L,R),X,Y,tree(K,L1,R1)):- замена(L,X,Y,L1),замена(R,X,Y,R1).
Скажите, что здесь делается, в какой вершине происходит заменв
замена(tree(X,tree(Y,L,R),tree(Y,LE,RA)),X,Y,tree( Y,tree(X,L1,R1),tree(X,LE1,RA1)))
Ответить с цитированием
  (#11 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,953
Сказал(а) спасибо: 2
Поблагодарили 302 раз(а) в 302 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 23.10.2014, 23:08

Вместо зелёного Х становится красный Y.
Вместо зелёного Y становится красный Х.
Синие X и Y - это оригинальные значения, которые задаются при вызове предиката замена.

замена(tree(X,tree(Y,L,R),tree(Y,LE,RA)),X,Y,tree( Y,tree(X,L1,R1),tree(X,LE1,RA1)))

Последний раз редактировалось Винитарх; 23.10.2014 в 23:11
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TST-деревья L_QwertY_P Задания за деньги 1 20.12.2009 21:53
Деревья Chummy89 Prolog 2 13.12.2009 14:13
Деревья Retype Prolog 1 10.12.2009 19:25
Деревья tsi Prolog 1 18.05.2009 17:57
Деревья Lena_T Prolog 3 01.05.2008 16:26
WB-деревья lexamac Prolog 1 28.04.2008 19:56
Деревья Olga1987 Prolog 1 15.10.2007 19:24
Все те же деревья John-VT Pascal 1 01.03.2007 22:25
Деревья ViL Prolog 9 10.05.2006 21:26
Деревья! Опять деревья! $layer Prolog 3 19.02.2006 21:44
AVL-деревья (сбалансированные деревья) kifa Prolog 1 14.05.2005 18:58



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