评估Prolog中的三变量表达

时间:2013-07-08 20:13:45

标签: prolog

遵循四步抽象设计过程来定义递归规则以计算数学函数。您必须指明(使用注释代码)使用哪个步骤。注意,Prolog规则不返回值。您需要使用参数来保存返回值。您不能使用指数运算符**来计算表达式。

将递归规则factbar(F, X, Y, N)写入计算F = ((2*X + Y)^N)!(expbar的阶乘)。规则必须调用(使用)您设计的规则expbar ..

现在执行此操作F = ((2*X + Y)^N)我已经编写了代码,但我不知道如何在Prolog中编写阶乘:

expbar(R, X, Y, N) :-
   X > 0, Y > 0, N > 0,
   R is (2 * X + Y) ** N.

虽然我在我的程序中使用**作为指数,但我不知道如何使用其他方式。

1 个答案:

答案 0 :(得分:1)

我不知道“四步抽象设计过程”是什么,你没有包含那个细节。因此,您将转而采用我的两步递归函数设计流程。你的谓词是正确的,除了你没有定义pow/3,一个计算权力的函数。这显然是你任务的关键。我们来做吧。

第一步:确定您的基本案例。对于算术函数,基本案例涉及算术标识。对于取幂,标识是1.换句话说,X ** 1 = X.写下来:

pow(X,1,X).

因为这是一个具有两个输入和一个结果的函数,所以我们将其编码为arity-3谓词。这个事实简单地说X到第一个力量是X.

第二步。现在考虑归纳案例。如果我有X ** N,我可以将它扩展为X *(X **(N-1))。通过取幂的定义和归纳规则,这完成了谓词的定义。用Prolog语法对其进行编码:

pow(X,N,Y) :-
  N > 1,
  succ(N0, N),
  pow(X, N0, Y0),
  Y is X * Y0, !.

这为您提供了计算指数的谓词。如果您在**/2谓词中替换expbar/4的使用,则表示您符合作业的要求。