![]() |
|
|
![]()
|
|
| vilko01 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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. и тоже самое со всеми программами с рекурсией. ? |
|||
|
||||
| Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: 6 Всего: 49 |
Судя по всему, изучать Вы его начали по какой-нибудь книжке, основанной на Turbo Prolog (он же PDC, он же Visual), а это было плохой идеей.
Дело в том, что "=" сопоставляет левую часть с правой, но не вычисляет значение выражения справа. Т.е. при первом же вызове fact(2,X) N1 будет сопоставлено с "2-1" (а то, что это на самом деле единица, получено не будет). Если надо что-то вычислить, вместо "=" надо пользоваться оператором "is", т.е. код превратится в такой:
|
|||
|
||||
![]()
|
| Правила форума Prolog | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Prolog | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |