我正在尝试将数学函数转换为 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.
感谢任何帮助。
最佳答案
Prolog 使用谓词演算。 谓词可以评估为真或假。
您需要写出真实的内容(任何其他内容都被假定为错误的,因为 prolog 解释器将使用封闭世界假设)。
我们可以为您的函数定义一个谓词:
函数(X,Y)
其中 func 是一个谓词,如果 X 是 x 且 Y 是 f(X),则计算结果为真 当 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 时,您的谓词 func 为真
这将是您的基本案例。 (您只需要一个,因为您只有 1 个递归调用)。
接下来是你的递归案例:
一般 X 的函数何时为真
- 我们需要 X 大于 0
- 我们需要我们称为 V 的 f(x-1) 的结果
- 当 func(X-1, V) 为真时,V 是 f(X-1) 的结果
- prolog 不允许谓词内部的表达式,所以我们声明 U 是 X-1
- 然后我们将所有内容放在一起并声明 Y 是 X *X + V
关于prolog - 如何编写序言数学函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31443464/