Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Нужно объяснить принцип работы предиката
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
zlob.jc zlob.jc вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2010
По умолчанию 27.05.2010, 06:25

Здравствуйте, есть прадикат генерирующий все перестановки множества. Он работает, но не могу понять как он это делает . При прогоне на листочке, например, для shake([1,2,3], X) получаю всегда только одно множество X = [1,3,2].

shake(X, [Y | T1]) :-append(I, [Y | T2], X), append(I, T2, L), shake(L, T1).

append(X, Y, Z) добавляет элемент X в конец множества Y, Z результат.

swi-prolog

Натолкните на правильный ход мысли, почему предикат является не детерминированным?
Ответить с цитированием
  (#2 (permalink)) Старый
zlob.jc zlob.jc вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2010
По умолчанию 29.05.2010, 08:51

Что, ниукого никаких мыслей нет?
Ответить с цитированием
  (#3 (permalink)) Старый
aag aag вне форума
А.А.Г.
 
Аватар для aag
 
Сообщений: 3,397
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
Адрес: Адмиралтейская)))
По умолчанию 29.05.2010, 12:58

Использовать здесь append() несколько мутно и несуразно.

Код:
DOMAINS
i=integer   il=i*
PREDICATES
shake(il,il)
mem(il,i,il)
CLAUSES
shake(A,[B|C]):- mem(A,B,D), shake(D,C).
shake([],[]).

mem([A|B],A,B).
mem([A|B],C,[A|D]):- mem(B,C,D).
Код:
Goal: shake([1,2,3],X)
X=[1,2,3]
X=[1,3,2]
X=[2,1,3]
X=[2,3,1]
X=[3,1,2]
X=[3,2,1]
6 Solutions
И понятности для:
Код:
Goal: mem([1,2,3],X,Y)
X=1, Y=[2,3]
X=2, Y=[1,3]
X=3, Y=[1,2]
3 Solutions
Goal: mem([1,2,3],A,L1), mem(L1,B,[C])
A=1, L1=[2,3], B=2, C=3
A=1, L1=[2,3], B=3, C=2
A=2, L1=[1,3], B=1, C=3
A=2, L1=[1,3], B=3, C=1
A=3, L1=[1,2], B=1, C=2
A=3, L1=[1,2], B=2, C=1
6 Solutions
Ответить с цитированием
  (#4 (permalink)) Старый
zlob.jc zlob.jc вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2010
По умолчанию 30.05.2010, 17:26

Цитата:
Использовать здесь append() несколько мутно и несуразно.
ну что было тем и пришлось пользоваться
ваш вариант действительно понятней, спасибо
Ответить с цитированием
  (#5 (permalink)) Старый
zlob.jc zlob.jc вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 27.05.2010
По умолчанию 31.05.2010, 03:14

еще немного подумав родилось такое
Код:
shake(X, [Y | T1]):- contains(Y,X), delete(Y,X,T2), shake(T2,T1).
Ответить с цитированием
Ads.
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно написать принцип работы программы juicy Pascal 8 27.07.2011 11:29
Принцип работы с GPSS LilyM Вопросы начинающих программистов 0 09.01.2011 17:53
КИХ фильтр на MMX как объяснить работы программы Minority Assembler 0 21.12.2010 19:03
Нужно написать три предиката Angelikachka Prolog 0 12.10.2010 21:25
Принцип работы DHCP сервера Tolan Сетевые подключения 1 11.12.2009 05:49
Какой принцип работы DC++? Bronks Любые вопросы от новичков 1 08.08.2008 23:23
Какой принцип работы FDD? mkr Любые вопросы от новичков 2 20.07.2008 00:37
Принцип работы sleep Shady С/С++ 2 31.03.2008 01:21
COM - Технология принцип работы с ней Saracin Visual C++ 12 13.03.2006 11:33
Принцип работы клиент сервер sq-Weezee C++ Builder 3 06.03.2006 19:52
В чем заключается принцип работы Autodesk Map 5 KISSKA Вопросы начинающих программистов 8 09.01.2006 14:05
Как понять принцип работы функции legrandmetre С/С++ 5 27.11.2005 16:28



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