| imho.ws |
![]() |
|
|
|
# 1 | |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Проблема с free/bound в Turbo Prolog 2.0
Есть простенькая программа на прологе, демонстрирующая работу предикатов free() и bound() (точнее говоря, она должна демонстрировать, но, как вы поняли, не делает этого):
Код:
predicates
fact(integer, integer)
clauses
fact(N, _) if free(N), write("error: argument not found"), nl, !.
fact(N, _) if N < 0, write("error: illegal argument"), nl, !.
fact(0, 1) if !.
fact(N, F) if N1 = N - 1, fact(N1, F1), F = N * F1.
Цитата:
Собсно вопрос: чё за ботва? Никто не в курсах? ![]() Кстати, программа Код:
predicates
x(integer)
clauses
x(X) if free(X), write("free"), nl, !.
x(_) if write("bound"), nl.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! |
|
|
|
|
|
# 2 |
|
::VIP::
Звезда первого сезона Молчун-2004 Регистрация: 24.08.2002
Сообщения: 1 575
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Гыхм... Проблема решилась изменением второго и четвертого правил:
Код:
fact(N, _) if free(N), write("error: argument not found"), nl, !.
fact(N, _) if bound(N), N < 0, write("error: illegal argument"), nl, !.
fact(0, 1) if !.
fact(N, F) if bound(N), N1 = N - 1, fact(N1, F1), F = N * F1.
Код:
x(X) if free(X), write("no arg!"), nl, !.
x(X) if write("arg = ", X), nl.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы! Последний раз редактировалось Ghost; 22.02.2005 в 17:02. Причина: склероZzz... |
|
|