遵循四步抽象设计过程来定义递归规则以计算数学函数。您必须指明(使用注释代码)使用哪个步骤。注意,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.
虽然我在我的程序中使用**作为指数,但我不知道如何使用其他方式。
答案 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
的使用,则表示您符合作业的要求。