- 17 -
Большинство функций, которые организованы в виде циклически
замкнутых процедур (циклов), можно описать, или с использованием
механизма рекурсии, или с использованием механизма возврата
(бектрекинга). Например, программа заполнении окна, размером во
весь экран, символом '_' может иметь два варианта:
Пример 1: (Рекурсивное выполнение функции заполнения окна
символом '_').
PREDICATES
ful(INTEGER,INTEGER,INTEGER)
ful1(INTEGER,INTEGER,INTEGER)
CLAUSES
ful(C,_,C):-!.
ful(C,R,F):-C1=C+1,ful1(0,R,C),ful(C1,R,F),!.
ful1(R,R,_):-!.
ful1(R,F,C):-R1=R-1,scr_char(R,C,'_'),ful1(R1,F,C),!.
GOAL makewindow(1,31,0,"",0,0,25,80),
ful(0,25,80),readchar(_),removewindow,!.
Пример 2: (Выполнение функции заполнения м '_' может иметь два
варианта:
Пример 1: (Рекурсивное выполнение функции заполнения окна
символом '_').
PREDICATEто-
рая содержит один детерминированный предикат).
DATABASE - CURRENT determ color(INTEGER,INTEGER)
PREDICATES repeat
CLAUSES repeat. repeat:-repeat.
GOAL makewindow(1,31,0,"",0,0,25,80),
assert(color(0,0)),repeat,color(R,C),scr_char(R,C,'_'),
R1=R+1,retractall(color(_,_)),assert(color(R1,C)), R=24,
C1=C+1,retractall(color(_,_)),assert(color(0,C1)),C1=80,
retractall(color(_,_)),readchar(_),removewindow,!.