[Prolog] Подсчет количества вариантов
От: raydac Эстония http://www.igormaznitsa.com
Дата: 25.09.08 10:40
Оценка:
Добрый день

У меня вопрос к гуру в языке Пролог. Никак не могу понять, как в Пролог организовать следующее действие:

variants(N):- predicat(_,_),N is N + 1,fail.

хотелось бы сосчитать количество вариантов, которые находит система при вычислении predicat(_,_), которые я перебираю при помощи fail, но N у меня постоянно 0.. юзаю SWI-Prolog.. как сосчитать количество вариантов выдаваемых системой не уходя в рекурсии?
https://github.com/raydac
Re: [Prolog] Подсчет количества вариантов
От: Spiceman  
Дата: 25.09.08 15:22
Оценка:
Здравствуйте, raydac, Вы писали:

R>Добрый день


R>У меня вопрос к гуру в языке Пролог. Никак не могу понять, как в Пролог организовать следующее действие:


R>variants(N):- predicat(_,_),N is N + 1,fail.


R>хотелось бы сосчитать количество вариантов, которые находит система при вычислении predicat(_,_), которые я перебираю при помощи fail, но N у меня постоянно 0.. юзаю SWI-Prolog.. как сосчитать количество вариантов выдаваемых системой не уходя в рекурсии?


Если переменная имеет конкретное значение (конкретизирована), то присвоить ей новой значение нельзя. Новое значение можно присвоить только после расконкретизации переменной, что может произойти в процессе возврата (при бектрекинге).
Предикат N is N + 1 возвращает ложь.
Мне довольно трудно сходу ответить на заданный вопрос, так как я не гуру и имею мало опыта на прологе. Поконкретней бы задачку.
Re: [Prolog] Подсчет количества вариантов
От: Beam Россия  
Дата: 25.09.08 20:42
Оценка:
Здравствуйте, raydac, Вы писали:

R>Добрый день


R>У меня вопрос к гуру в языке Пролог. Никак не могу понять, как в Пролог организовать следующее действие:


R>variants(N):- predicat(_,_),N is N + 1,fail.


R>хотелось бы сосчитать количество вариантов, которые находит система при вычислении predicat(_,_), которые я перебираю при помощи fail, но N у меня постоянно 0.. юзаю SWI-Prolog.. как сосчитать количество вариантов выдаваемых системой не уходя в рекурсии?


В SWI-Prolog есть библиотека aggregate.pl
В ней aggregate/3, который умеет count, min, max и пр.

Еще есть occurs.pl.
Там есть предикат count/2. Правда not public.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re: [Prolog] Подсчет количества вариантов
От: Трурль  
Дата: 26.09.08 05:57
Оценка:
Здравствуйте, raydac, Вы писали:

R>У меня вопрос к гуру в языке Пролог.


Это разве к гуру вопрос? Вот, примерно так.
variants(_):- assert(counter(0)),fail. 
variants(_):- retract(counter(N)),predicat(_,_),N1 is N + 1, assert(counter(N1)),fail. 
variants(N):- counter(N).
Re: [Prolog] Подсчет количества вариантов
От: Кодт Россия  
Дата: 26.09.08 07:48
Оценка:
Здравствуйте, raydac, Вы писали:

R>хотелось бы сосчитать количество вариантов, которые находит система при вычислении predicat(_,_), которые я перебираю при помощи fail, но N у меня постоянно 0.. юзаю SWI-Prolog.. как сосчитать количество вариантов выдаваемых системой не уходя в рекурсии?


Для SWI-prolog:
variants(N) :- findall((X,Y), predicate(X,Y), XYs), length(XYs,N).
% или вот даже так
variants(N) :- findall(_, X^Y^predicate(X,Y), Dummies), length(Dummies,N).

Посмотри в справке функции findall, bagof, setof.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Перекуём баги на фичи!
Re[2]: [Prolog] Подсчет количества вариантов
От: Кодт Россия  
Дата: 28.09.08 15:21
Оценка: :)
Здравствуйте, Beam, Вы писали:

B>В SWI-Prolog есть библиотека aggregate.pl

B>В ней aggregate/3, который умеет count, min, max и пр.

B>Еще есть occurs.pl.

B>Там есть предикат count/2. Правда not public.

Оффтопик: повбивал бы авторов SWI-Prolog за мега-уникальное расширение файлов.
Или этот диалект старше перла?
Перекуём баги на фичи!
Re[3]: [Prolog] Подсчет количества вариантов
От: Beam Россия  
Дата: 28.09.08 15:57
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Оффтопик: повбивал бы авторов SWI-Prolog за мега-уникальное расширение файлов.

К>Или этот диалект старше перла?

Ну, судя по wikipedia — оба где-то 1987 год.
Perl
SWI-Prolog
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[4]: [Prolog] Подсчет количества вариантов
От: Трурль  
Дата: 28.09.08 17:37
Оценка:
Здравствуйте, Beam, Вы писали:

B>Здравствуйте, Кодт, Вы писали:


К>>Оффтопик: повбивал бы авторов SWI-Prolog за мега-уникальное расширение файлов.

К>>Или этот диалект старше перла?

B>Ну, судя по wikipedia — оба где-то 1987 год.

B>Perl
B>SWI-Prolog
Но сам то пролог старше. А .pl — традиционное расширение для пролога с незапамятных времен.
Re[5]: [Prolog] Подсчет количества вариантов
От: Кодт Россия  
Дата: 28.09.08 18:29
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Но сам то пролог старше. А .pl — традиционное расширение для пролога с незапамятных времен.


Тогда повбивал бы авторов перла... хотя, конечно, надо повбивать авторов ДОС, в которой тип файла определяется кусочком его имени. А не сигнатурой в содержании (знаменитый юниксовый шабанг, например). Впрочем, повбивать автора ДОС каждый горазд
Перекуём баги на фичи!
Re[6]: [Prolog] Подсчет количества вариантов
От: Трурль  
Дата: 29.09.08 05:27
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Впрочем, повбивать автора ДОС каждый горазд

Начинать надо с авторов юникса. Это ж они первые начали.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.