Произведение двух натуральных чисел - Prolog

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

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

Добрый день. Возникла проблема с решением одной задачи. Нужно определить предикат умножения через сложение. Как это сделать через рекурсию (#1) - понятно, а вот с итерационным методом (#2) у меня возникли затруднения. Постарался сделать по аналогии, но ничего не получилось. #1.
#2.
Ещё есть вопрос по другой, уже решённой задаче.
Проблема заключается в том, что для каждой строки в базе данных выводится результат. И если даже у меня уже был данный режиссёр, то он опять же будет выведен в ответ, т.е. получается много мусора. Можно ли как-нибудь избежать этого момента?

Решение задачи: «Произведение двух натуральных чисел»

textual
Листинг программы
multiplication(_, 0, 0).
multiplication(X, Y, R) :-
    Y >= 1,
    assert( mult(X, Y, X) ),
    repeat,
    multiplication(R),
    !.
multiplication(X, Y, R) :-
    Y =< -1,
    Y1 is -Y,
    X1 is -X,
    multiplication(X1, Y1, R).
 
multiplication(R) :-
    retract( mult(_, 1, R) ).
multiplication(_) :-
    retract( mult(X, Y1, R0) ),
    YY is Y1 - 1,
    R1 is R0 + X,
    assert( mult(X, YY, R1) ),
    fail.

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

Код решает задачу поиска произведения двух натуральных чисел.

  1. Условие Y >= 1 проверяет, что второе число больше или равно 1.
  2. Ассерция assert( mult(X, Y, X) ) добавляет факт, что произведение чисел X и Y равно X.
  3. Рекурсивный вызов multiplication(R) происходит, пока произведение не будет равно R.
  4. Если второе число меньше или равно -1, то оно заменяется на -Y, а первое число заменяется на -X, и рекурсивный вызов multiplication(X1, Y1, R) происходит снова.
  5. Если произведение чисел еще не было найдено, факт retract( mult(_, 1, R) ) отменяется, и второе число уменьшается на 1, а результат произведения заменяется на X.
  6. Если произведение чисел было найдено, факт retract( mult(X, Y1, R0) ) отменяется, и второе число уменьшается на 1, а результат произведения заменяется на X + Y.
  7. Ассерция assert( mult(X, YY, R1) ) добавляет факт, что произведение чисел X и Y равно R1.
  8. Если произведение чисел было найдено, происходит переход к следующему числу. Если нет, происходит отказ.

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


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

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

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