Predicates for recursive functions Prolog
Формулировка задачи:
Доброе время суток!
Я новичок в Prolog. Нам задали написать предикаты к рекурсивным функциям
Помогите пожалуйста, хотя бы с чего начать.
Заранее спасибо!
Решение задачи: «Predicates for recursive functions Prolog»
textual
Листинг программы
predicates
func(integer,integer,integer)
clauses
func(0,_,0). %% f(x,y)= 0 if x=0
func(1,_,1). %% f(x,y)= 1 if x=1
func(X,Y,F) :- X>1, XX=X-2, func(XX,Y,FF), F=Y*Y+FF.
goal
write("x="),readint(X),write("y="),readint(Y),func(X,Y,F), write("f="),write(F),nl.
Объяснение кода листинга программы
predicates- объявление функций в виде предикатов в Prologfunc(integer,integer,integer)- определение функции с тремя аргументами типа integerclauses- определение правил (условий) для функцииfuncfunc(0,_,0).- базовое правило для функцииfuncкогда аргументXравен 0func(1,_,1).- базовое правило для функцииfuncкогда аргументXравен 1func(X,Y,F) :- X>1, XX=X-2, func(XX,Y,FF), F=Y*Y+FF.- рекурсивное правило для функцииfuncкогда аргументXбольше 1goal- определение цели (задачи) для программыwrite(x=),readint(X),write(y=),readint(Y),func(X,Y,F), write(f=),write(F),nl.- основной код программы, вывод значений переменныхX,Y,Fи вычисление функцииfuncreadint(X)- функция для чтения целого числа с клавиатуры и присвоения его переменнойXwrite(F)- функция для вывода значения переменнойFна экранnl- функция для вывода символа новой строкиXX- временная переменная для хранения значения аргументаXв рекурсивной функцииfuncFF- временная переменная для хранения результата вызова функцииfuncв рекурсивной функцииfunc