Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу Использование рекурсивных правил
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Михаил_1987 Михаил_1987 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.01.2009
По умолчанию 17.01.2009, 11:49

Задача: Функция Аккермана.

Ak(0,N)=N+1
Ak(M,0)=Ak(M-1,1)
Ak(M,N)=Ak(M-1),Ak(M,N-1)

Проблема. Я написал программу, но вывод результатов получается не такой какой требуется...

Код:
***
PREDICATES
ack(integer,integer)

CLAUSES
ack(4,4):-!.

ack(0,N):- 
M=0,
N1=N+1.
ack(0,N1).

ack(M,0):- 
M>0,
M1=M-1. 
ack(M1,N1).

ack(M,N):- 
M>0, 
N>0, 
M1=M-1, 
N1=N-1, 
ack(M,N1),
ack(M1,N1).
***
Goal: ack(2,2)
true
Goal: ack(3,2)
true
Goal: ack(3,7)
true
***
Как мне получить такой результат: ack(2,2)=7?

Задачу нужно написать на Turbo Prolog 2.0.
Ответить с цитированием
  (#2 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 17.01.2009, 14:09

Цитата:
Ak(0,N)=N+1
Ak(M,0)=Ak(M-1,1)
Ak(M,N)=Ak(M-1),Ak(M,N-1)
у Вас в
Цитата:
Ak(M,N)=Ak(M-1),Ak(M,N-1)
скобочек не хватает, по-моему....
Ответить с цитированием
  (#3 (permalink)) Старый
Михаил_1987 Михаил_1987 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.01.2009
По умолчанию 17.01.2009, 14:24

Цитата:
у Вас в скобочек не хватает, по-моему....
Это не важно, потому что это текст задания, а не программа...
Вот в программе где-то ошибка, потому и не считает
Ответить с цитированием
  (#4 (permalink)) Старый
aag aag вне форума
ушёл... не вернётся)))
 
Сообщений: 3,400
Сказал(а) спасибо: 0
Поблагодарили 82 раз(а) в 82 сообщениях
Регистрация: 29.11.2008
По умолчанию 17.01.2009, 14:39

так, я Вам одно предложение для одного случая:
Цитата:
Ak(0,N)=N+1
Код:
Ak(0,N,X):- X=N+1,!.
Цитата:
Goal: Ak(0,5,X)
X=6Yes
Ясьненько?! а про скобочки -- очепятка...
Цитата:
Вот в программе где-то ошибка, потому и не считает
ошибки в проге нету. Она делает, что ей сказали:
Код:
ack(0,N):- 
M=0,
N1=N+1.
-- и куда этот N1 пошёл?! кто его видел?!
Цитата:
M=0,
-- а это чё за М?! Акк(0,... -- это уже -- первый аргумент =0... пролог переменные помнит только в пределах предложения, однако, до точки...
Ответить с цитированием
  (#5 (permalink)) Старый
Михаил_1987 Михаил_1987 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.01.2009
По умолчанию 17.01.2009, 15:28

Попробовал...

ack(M,0,X):-
M>0,
M1=M-1,
ack(M1,1,X),!.

ack(M,N,X):-
M>0,
N>0,
M1=M-1,
N1=N-1,
ack(M,N1,X),
ack(M1,N1,X),!.

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

На этом форуме есть практически всё.
1) Откройте форумный поисковик.
2) Наберите ключевое слово: Аккерман*
3) Запустите поиск.
4) Радуйтесь.
Ответить с цитированием
  (#7 (permalink)) Старый
Михаил_1987 Михаил_1987 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.01.2009
По умолчанию 28.01.2009, 18:50

Возникла проблема в "функции Аккермана":

Код:
***
PREDICATES
ack(integer,integer,integer)

CLAUSES
ack(0,N,X):-!,
X=N+1.

ack(M,0,X):-!,
M1=M-1,
ack(M1,1,X).

ack(M1,A,X):-!.
ack(M,N,X):-
N1=N-1,
M1=M-1,
ack(M,N1,A),!,
ack(M1,A,X).
***
Как сосчитать: ack(1000,2000,X)=?
Что нужно именно дописать в программе ?
Ответить с цитированием
  (#8 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 28.01.2009, 21:20

Наберите ключевое слово: Аккерман* в поисковике. Он Вам выдаст штук десять тем с этой функцией в разных прологах.
Почитайте, разберитесь. Изучите исходники и то, как их запускать.
А те исходники, что Вы здесь привели - это бред какой-то.
НЕ ЗАСОРЯЙТЕ ФОРУМ ВАШИМ МУСОРОМ!!!
Ответить с цитированием
  (#9 (permalink)) Старый
Михаил_1987 Михаил_1987 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.01.2009
По умолчанию 08.02.2009, 15:33

Цитата:
Наберите ключевое слово: Аккерман* в поисковике. Он Вам выдаст штук десять тем с этой функцией в разных прологах.
Почитайте, разберитесь. Изучите исходники и то, как их запускать.
А те исходники, что Вы здесь привели - это бред какой-то.
НЕ ЗАСОРЯЙТЕ ФОРУМ ВАШИМ МУСОРОМ!!!
Я весь поиск перерыл и так ничего не нашел...

У меня программа работает хорошо на маленьких числах, а если я захочу посчитать большие ack(1000,2000,X) программа виснет
Что делать?
Ответить с цитированием
  (#10 (permalink)) Старый
Михаил_1987 Михаил_1987 вне форума
Member
 
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 17.01.2009
По умолчанию 08.02.2009, 18:27

Код:
***
PREDICATES
akkerman(integer,integer,integer)

CLAUSES
akkerman(0,N,X):- X=N+1,!.
akkerman(M,0,X):- Mn=M-1, !, akkerman(Mn,1,X).
akkerman(M,N,X):- Mn=M-1, Nn=N-1, !, akkerman(M,Nn,Y), !, akkerman(Mn,Y,X).

***
Goal: akkerman(0,0,X)
X=1
1 Solution
Goal: akkerman(3,2,X)
X=29
1 Solution
Goal: akkerman(3,4,X)
X=125
1 Solution
Goal: akkerman(3,5,X)
X=253
1 Solution
Goal: akkerman(2,3,X)
X=9
1 Solution
***
Не пойму, мне задали сосчитать функцию Аккермана для А(1000,2000). Когда в теории пишут что: "Эта функция растёт очень быстро, например, число А(4,4) настолько велико, что количество цифр в порядке этого числа многократно превосходит количество атомов в наблюдаемой части вселенной".
Что за бред тогда мне задали....
Ведь получается что точно нельзя сосчитать функцию Аккермана для чисел больше 4...
Ответить с цитированием
  (#11 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,958
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 09.02.2009, 17:23

Да. Вам задали заведомо невыполнимое задание, по неведению своему.
Ответить с цитированием
Ads
Ответ

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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правил вывода родственных отношений RuslanTM Prolog 2 16.12.2011 20:46
Загрузка фактов и правил из внешних файлов tumanovalex Prolog 2 01.10.2011 20:22
Программирование рекурсивных процедур. malinina Pascal 0 26.04.2011 23:42
Организация рекурсивных вычислений в Lisp dron4ikk Lisp 3 04.05.2010 18:04
Есть ли бесплатный хостинг без строгих правил? artishok Любые вопросы от новичков 24 08.09.2008 18:34
Использование GPU Neptun Программирование графики 0 13.09.2007 15:30
Использование dll bikart Visual Basic 2 11.09.2007 18:55
Разработчик правил проектирования топологии (Product Engineer) 2000-2500$ youth Работа 0 24.07.2007 13:04
Ввод правил от пользователя rogue_uss Prolog 15 07.10.2006 20:21
Распараллеливание рекурсивных подпрограмм imported_Lio C++ Builder 3 09.06.2005 17:59
Винитарху (большие объемы БД фактов и правил) LKS Prolog 5 13.05.2005 11:23



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