我正在尝试将数学函数转换为prolog,但我不断收到错误。任何人都可以给我一个提示,我的错误在哪里吗?
我想转换f(x)= x 2 + f(x - 1)。所以我假设这是一个递归过程。以下是我到目前为止所做的工作。
function(0,0) :- !.
function(1,1) :- !.
function(X,Y) :-
X1 is ((X * X) + (X - 1)),
function(X1, Y).
我也试过
function(0,0) :- !.
function(1,1) :- !.
function(X,Y) :-
X1 is (X * X), X2 is (X - 1),
function(X1, N1),
function(X2, N2),
Y is N1 + N2.
感谢任何帮助。
答案 0 :(得分:3)
Prolog使用谓词演算。 谓词可以评估为真或假。
你需要写出什么是真的(其他任何东西都假定为假,因为prolog解释器将使用封闭的世界假设)。
对于你的函数我们可以定义一个谓词:
func(X,Y)
其中func是一个谓词,如果X是x而Y是f(X)则求值为true 当func(X,Y)为真时,你需要告诉prolog
func(0, 0).
func(X, Y) :- X > 0, U is X - 1, func(U, V), Y is X * X + V.
可以想到上面的代码 当X为0且Y为0
时,谓词函数为真这将是您的基本情况。 (你只需要一个,因为你只有一次递归调用)。
接下来是您的递归案例:
对于一般X来说,当func为真时
答案 1 :(得分:2)
试试这个:
f(0,0) . % f(0) is 0.
f(X,Y) :- % otherwise...
integer(X) , % - constrain X to be an integer, and
X > 0 , % - constrain X to be positive,
X1 is X-1 , # - then decrement X
f(X1,Y1) , % - compute f(X-1) ,
Y is X*X + Y1 % - and add X*X to that to get the result.
. % Easy!