2012-03-02 2 views
-1

현재 두 개의 입력에 기본과 지수를 사용하는 프로그램을 만들려고합니다. 기본적으로 Prolog 사용자가 2를 입력하고 2를 입력하면이 두 가지를 묻습니다. 지수 3, 나는 팔을 반환하려면 .. 여기에 지금까지 가지고, 그리고 나던 일 것입니다 :이 Prolog 프로그램을 작동시키는 방법

base:- write('Input the base: '),read(X),expo(X). 
exponent:- write('Input the exponent '),read(Y),expo(Y). 


expo(X,Y):- A is Y*Y,B is A*X,write(B). 

도와주세요

+4

_ 디버깅 조언이 나오면 거의 쓸모가 없습니다. _what_가 작동하지 않습니까? 당신은 어떤 결과물을 얻습니까? 당신은 어떤 결과물을 기대합니까? 'expo (A, B) : -'는 두 개의 매개 변수를 취하는 규칙을 정의하는 것처럼 보이지만 'base : -'와'exponent : -'는 단 하나의 매개 변수로 호출하는 것처럼 보입니다. – sarnold

답변

5
  • 당신은 expo/2을 정의한 (즉, 술어 expo과 두 개의 인수가 포함되어 있음). 그러나 expo/1.
  • read/1 개의 호출을 다른 조건으로 분리 한 방법은 XY이 서로 다른 범위에 있습니다. read(X)read(Y)을 동일한 규칙에 넣지 않는 이상 expo(X,Y)으로 전화 할 수 없습니다.
  • 귀하의 지수 계산 정의가 잘못되었습니다. X^Y는 Y * Y * X가 아닙니다. 직접 구현해야하는 경우 재귀 조건이 필요합니다. 그렇지 않은 경우 기본 제공 지수 연산자 X**Y을 사용하십시오.
1

pow를 올바르게 구현하는 방법을 보려면 this question을 참조하십시오. 입력 파트의 경우 pow/ 3 술어가 작동 할 때까지 구현하지 않아도됩니다. 이 술어를 테스트하려면 그 동안 ?- pow(2, 3, R).을 사용하면됩니다.

그리고 Prolog는 R = 8.으로 대답해야합니다.

이전 답변 에서처럼 입력 부분이 잘못되었습니다. 그러나이 이전의 대답은 이미 상황을 개선하는 방법에 대한 충분한 단서를 제공해 주었고, 나는 그것을 그대로 남겨 둘 것입니다.

관련 문제