2013-12-12 33 views
1

我们必须在序言Q(a,b,n)中找到一个函数< b和以下方式: Q(a,b,n)= max {k∈N| b ^的k - 一个-1K-< = N}如何计算prolog中的函数?

这里是我的代码,但它总是给我一个 “不”

qs(A,B,N,R,C) :- R>N, R is B^C-A^C. 
qs(A,B,N,R,C) :- A<B, C1 is C, R is B^C1-A^C1, C1 is C+1, R=<N, qs(A,B,N,R,C1). 
qs(A,B,N,R) :- A<B, C is 0, qs(A,B,N,R,C). 

例如,如果我有Q(2,3,18)输出应该是2.

+0

我得到了'qs(2,3,18,R)'的“实例化错误”。你真的应该告诉这个函数的实际定义。我们只能猜测。 – false

+0

而'qs(3,2,1,R).'失败。对? – false

+0

我认为定义在那里..有一些错误的帖子,所以我再次编辑它,在这里你走! :) – Noisie

回答

1
qs(A, B, N, R) :- 
    A < B, 
    once((
     length(_,K), 
     B^K - A^K > N 
    )), 
    R is K-1. 
0

我相信prolog使用**来取幂,而不是^(假设这就是你想要做的)。

+0

其实,两个作品。 (^)/ 2的优点是如果两个操作数都是整数,则生成整数值,而(**)/ 2总是生成一个浮点数。 – false