Впервые сталкиваюсь с prolog, пожалуйста реализовать умножение 2 на число, используя сложения, через рекурсию

Узнай цену своей работы

Формулировка задачи:

Как я поняла, это должно выглядеть примерно так 2*(b+1) = 2+2*b на примере цифр 2*3 = 2+(2*2) = 2+(2+(2*1)) = 2+(2+2) = 2 + 4 = 6
ничего не получается, пожалуйста кто-нибудь помогите predicates p(integer,integer) clauses p = - p(2,-b):- b < 0; p = 0:- b = 0; p = 2 + p(2, b-1).

Решение задачи: «Впервые сталкиваюсь с prolog, пожалуйста реализовать умножение 2 на число, используя сложения, через рекурсию»

textual
Листинг программы
predicates
mul(integer,integer,integer)
mulp(integer,integer,integer)
mul2(integer,integer)
 
clauses
mulp(0,_,0).
mulp(_,0,0).
mulp(1,K,K) :- !.
mulp(N,K,P) :- N1=N-1, mulp(N1,K,P1), P=P1+K.
 
mul(X,Y,Z) :- X>=0, Y>=0, mulp(X,Y,Z), !.
mul(X,Y,Z) :- X<0, Y<0, X1=-X, Y1=-Y, mulp(X1,Y1,Z), !.
mul(X,Y,Z) :- X1=abs(X), Y1=abs(Y), mulp(X1,Y1,Z1), Z=-Z1.
 
mul2(X,Y) :- mul(2,X,Y).

Объяснение кода листинга программы

Код реализует умножение двух чисел через рекурсию.

  1. Предполагается, что числа не могут быть отрицательными, так что мудрёные проверки на отрицательность чисел на входе отсекаются сразу.
  2. Рекурсивная функция mulp(N,K,P) выполняет умножение числа N на K и возвращает результат P.
  3. Базовый случай для рекурсии в функции mulp(N,K,P) это когда N=0 или K=0, тогда P=0.
  4. Когда N=1, то результат P=K.
  5. В общем случае, рекурсивная функция mulp(N,K,P) уменьшает значение N на единицу и вызывает сама себя с уменьшенным значением N и K, и добавляет к результату P значение K.
  6. Рекурсивная функция mul(X,Y,Z) проверяет, что X и Y неотрицательны, и вызывает функцию mulp(X,Y,Z).
  7. Если X или Y отрицательны, то функция mul переключает знаки чисел на положительные и вызывает функцию mulp(X,Y,Z).
  8. Если оба числа X и Y положительны, то функция mul переключает знаки чисел на абсолютные значения и вызывает функцию mulp(X,Y,Z).
  9. Функция mul2(X,Y) вызывает функцию mul(2,X,Y). Получается, что функция mul2(X,Y) выполняет умножение двух чисел X и Y.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы