a(X, Y) :- writeNumber(X), write(" "), X < Y, X_NEW = X + 1, a(X_NEW, Y).
writeNumber(X) :- X_NEW is X, write(X_NEW).
Зададим вопрос системе.
a(2, 8).
Задача 2
Получить сумму всех целых чисел на определённом отрезке.
Напишем код:
writeNumber(X) :- X_NEW is X, write(X_NEW).
b(S, A, B) :- S_NEW = S + A, A_NEW = A + 1, writeNumber(S_NEW), write(" "), A < B, b(S_NEW, A_NEW, B).
summa(A,B) :- b(0, A, B).
Зададим вопрос системе.
summa(2, 5).
Система выведет на экран: "2 5 9 14"
Теперь модифицируем программу так, чтобы она выводила только конечный ответ.
Напишем код:
a.
writeNumber(X) :- X_NEW is X, write(X_NEW).
writecmp(S, A, B) :- A =:= B, writeNumber(S).
writecmp(S, A, B) :- a.
b(S, A, B) :- S_NEW = S + A, A_NEW = A + 1, writecmp(S_NEW, A, B), A < B, b(S_NEW, A_NEW, B).
summa(A,B) :- b(0, A, B).
Зададим вопрос системе.
summa(2, 5).
Теперь система выведет: "14"
Задача 3
Получить сумму цифр целого числа.
Напишем код:
writeNumber(X) :- X_NEW is X, write(X_NEW).
a.
writecmp(S, A, B) :- A =:= B, writeNumber(S).
writecmp(S, A, B) :- a.
a(COUNT, X, S, MAX) :- OST_NEW = mod(X, 10), X_NEW = div(X, 10), S_NEW = S + OST_NEW, COUNT_NEW = COUNT + 1, writecmp(S_NEW, COUNT_NEW, MAX), COUNT_NEW < MAX, a(COUNT_NEW, X_NEW, S_NEW, MAX).
cifrsum(X) :- a(0, X, 0, 15).