Как заставить эту программу Prolog работать - PullRequest
0 голосов
/ 02 марта 2012

В настоящее время я пытаюсь создать программу, которая принимает два входа - основание и показатель степени, поэтому в основном я собираюсь запросить эти две вещи, например, если пользователь Prolog вводит основание 2 и показатель 3, я хочу, чтобы он возвратил8 .. Вот то, что я получил до сих пор, и не работает:

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).

ПОМОГИТЕ ПОЖАЛУЙСТА

Ответы [ 2 ]

5 голосов
/ 02 марта 2012
  • Вы определили expo/2 (то есть предикат expo с двумя аргументами), но вы вызываете expo/1.
  • То, как вы разделили свои read/1 вызовы на разные предикаты, означает, что X и Y находятся в разных областях; вы никогда не сможете позвонить expo(X,Y), если не поместите read(X) и read(Y) в одно правило.
  • Ваше определение степени не верно. X ^ Y это не Y * Y * X. Если вам необходимо реализовать это самостоятельно, для этого вам понадобится рекурсивный предикат. Если нет, используйте встроенный оператор возведения в степень, X**Y.
1 голос
/ 02 марта 2012

См. этот вопрос , чтобы увидеть, как правильно реализовать pow. Что касается входной части, вы можете не беспокоиться о ее реализации, пока ваш предикат pow/ 3 не сработает. Чтобы проверить этот предикат, вы можете просто использовать ?- pow(2, 3, R)..

А Пролог должен ответить R = 8..

И, как сказано в предыдущем ответе, часть ввода неверна. Но этот предыдущий ответ уже дал достаточные указания о том, как улучшить ситуацию, поэтому я оставлю это на этом.

...