Ответ в теме: Возведение в степень сложением на 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).