2013-12-12 3 views
1

우리는 < b를 가지고 다음과 같은 방법으로 프롤로그 Q (a, b, n)에서 함수를 찾아야 만합니다 : Q (a, b, n) = max {k ∈ N | B^K -^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

관련 문제