Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с рекурсией в Прологе 
:(
    Опции темы
vilko01
Дата 16.3.2013, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 16.3.2013

Репутация: нет
Всего: нет



Здравствуйте.

Начал изучать пролог и наткнулся на непонятную ошибку при 
использовании рекурсии.

Напсал программку:
....................................................................
fact(1,1).
fact(N,F):-N>1, N1=N-1, fact(N1,F1), F=F1*N.
....................................................................

ввожу fact(2, X).

программа выдаёт false.

и тоже самое со всеми программами с рекурсией.

?
PM MAIL   Вверх
Фантом
Дата 16.3.2013, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 6
Всего: 49



Судя по всему, изучать Вы его начали по какой-нибудь книжке, основанной на Turbo Prolog (он же PDC, он же Visual), а это было плохой идеей.
Дело в том, что "=" сопоставляет левую часть с правой, но не вычисляет значение выражения справа. Т.е. при первом же вызове fact(2,X) N1 будет сопоставлено с "2-1" (а то, что это на самом деле единица, получено не будет). Если надо что-то вычислить, вместо "=" надо пользоваться оператором "is", т.е. код превратится в такой:
Код

fact(1,1).
fact(N,F):-N>1, N1 is N-1, fact(N1,F1), F is F1*N.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.