2013-12-12 3 views
1

Мы должны найти функцию в прологе Q (a, b, n) с < b и следующим образом: Q (a, b, n) = max {k ∈ N | не б^к - а^к < = п}как вычислить функцию в прологе?

вот мой код, но он всегда дает мне «нет»

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

Я считаю, что пролог использует ** для возведения в степень, а не^(предполагая, что это то, что вы хотите сделать).

+0

На самом деле, оба произведения. (^)/2 имеет преимущество генерации целочисленных значений, если оба операнда являются целыми числами, тогда как (**)/2 всегда создает поплавок. – false

Смежные вопросы