Ответ в теме: Возведение в степень сложением на Prolog

      Комментарии к записи Ответ в теме: Возведение в степень сложением на Prolog отключены
#2579

Функция должна принимать дробное число, возводимое в степень, целочисленную степень и возвращать дробный результат:

predicates
  pow(real, integer, real)

В функции может быть три варианта поведения в зависимости от значения степени:

  • степень равна нулю — результат равен единице. Это частный случай при котором будет останавливаться рекурсия;
  • степень больше ноля — рекурсивно обрабатывается случай с уменьшенной на единицу степенью, результат умножается на исходное число, т.к. в этом случае a^b = a^(b-1) * a;
  • степень меньше ноля — рекурсивно обрабатывается случай с учеличенной на единицу степенью, результат делится на исходное число, т.к. в этом случае a^b = a^(b+1) / a.

clauses	
  pow(Value, 0, 1):-!.
  pow(Value, Power, ValuePower):-
  	Power > 0, !,
  	TailPower = Power - 1,
  	pow(Value, TailPower, TailValuePower),
  	ValuePower = TailValuePower*Value.
  pow(Value, Power, ValuePower):-
  	TailPower = Power + 1,
  	pow(Value, TailPower, TailValuePower),
  	ValuePower = TailValuePower/Value.

Для проверки решения запросим два числа и запустим программу:

goal
	write("Value: "), readreal(Value), 
	write("Power: "), readInt(Power),
	pow(Value, Power, ValuePower).