А что делать с полученными числами Каталана?
Сформировать из них список или просто вывести на экран в порядке получения?
Консольная программа в Visual Prolog 7.3 PE, которая выводит на экран сформированный список из 15 чисел Каталана:
implement main
open core, console, list
constants
className = "main".
classVersion = "".
class predicates
catalan:(integer, integer) procedure (i, o).
sum:(integer, integer, integer) procedure (i, i, o).
create_Catalan_List:(integer, integer, integer_list) procedure (i, i, o).
catalan_List:(integer, integer_list) procedure (i, o).
clauses
classInfo(className, classVersion).
sum(0, N, C1 * C2) :- catalan(N - 1, C1), catalan(0, C2), !.
sum(K, N, C1 * C2 + S) :- catalan(K, C1), catalan(N - 1 - K, C2), sum(K - 1, N, S).
catalan(0, 1) :- !.
catalan(N, C) :- sum(N - 1, N, C).
create_Catalan_List(N, N, [ ]) :- !.
create_Catalan_List(N, K, [H | T]) :- catalan(K, H), create_Catalan_List(N, K + 1, T).
catalan_List(N, L) :- create_Catalan_List(N, 0, L).
clauses
run() :- init(), catalan_List(15, L), write(L), _ = readChar().
end implement main
goal
mainExe::run(main::run).
В более старых версиях писать не приходилось, но предикаты должны выглядеть так же.
Может не быть библиотечного домена integer_list, тогда добавьте его описание:
domains
integer_list = integer*.
К тому же "прототипы" предикатов перечисляются в секции predicates (без ключевого слова class).
И другие не очень значительные отличия синтаксиса, такие как наличие/отсутствие точек и двоеточий.
P.S. Так как в Прологе я не очень, то возможно пара вспомогательных предикатов лишние.
Другие языки программирования и технологии
Простая прога на prolog - вывод чисел Каталана. HELP! Очень нужно! У меня мозг уже плавится. В долгу не останусь.
ага.. . а самое главное (вычисление этого самого cat(k)) оставили за кадром)))
Андрей Турин
ну так там же рекурсия идет
там 2 формулы -- аналитическая, и рекурентная (рекурсивная)
http://e-maxx.ru/algo/catalan_numbers
вот главный фрагмент
fnc_C(n) - где n - номер числа ряда+1,т. е. fnc_C(0) = 1 это 1 член ряда
int fnc_C(int n)
{
if (n < = 0) return 1;
int rez=0;
for (int k = 0; k < n; k++) rez+= ( fnc_C(k) * fnc_C((n - 1) - k) );
return rez;
}
private void button1_Click(object sender, EventArgs e)
{
string s = "";
textBox1.Text="Catalan:";
for (int i = 0; i < 10; i++) s+=fnc_C(i).ToString()+" ";
textBox1.Text = s;
}
там 2 формулы -- аналитическая, и рекурентная (рекурсивная)
http://e-maxx.ru/algo/catalan_numbers
вот главный фрагмент
fnc_C(n) - где n - номер числа ряда+1,т. е. fnc_C(0) = 1 это 1 член ряда
int fnc_C(int n)
{
if (n < = 0) return 1;
int rez=0;
for (int k = 0; k < n; k++) rez+= ( fnc_C(k) * fnc_C((n - 1) - k) );
return rez;
}
private void button1_Click(object sender, EventArgs e)
{
string s = "";
textBox1.Text="Catalan:";
for (int i = 0; i < 10; i++) s+=fnc_C(i).ToString()+" ";
textBox1.Text = s;
}
Похожие вопросы
- Нужен скрипт, бинд, прога, макрос, хоткей. Что угодно. Помогите, пожалуйста, очень нужно.
- Помогите выбрать прогу, очень нужно!!!
- Помогите плиз, написать прогу на Си++! Срочно очень нужно!
- Помогите написать прогу на Паскале, экзамен горит, очень нужно..
- Взлом rar архива кто знает как можно его взломать??? В долгу не останусь!!!
- Помогите написать очень простую прогу по программированию в Делфи 7
- Нужна прога чтоб можно было на фото приминять ефекты и прочие функции. Очень нужно, дайте ссылу ПЛЗ!!!
- как писать проги, и на чём очёнь нужно плиз аааааааааааааааааааааааааа
- КТО ЗНАЕТ ХОРОШИЕ ПРОГИ ДЛЯ НОКИА н73??очень нужно!!!
- Простейшая прога для обрезания и объединения видео и добавления простых эффектов на русском языке
Вы просто гений, и это факт )
Если что понадобится, обращайтесь.
блин, только вот 5.2 непонимает конструкции типа (0, N, C1 * C2) 8(
sum(0, N, C1 * C2) :- catalan(N - 1, C1), catalan(0, C2), !.
как бы переложить на вид, типа
sum(0, N, C1) :- N1=N-1, C3=C1*C2, catalan(N1, C3), catalan(0, C2), !.
но выбивает ошибку, 501 Free variable in expression C2