# Циклы

## Задача 1

Вывести все целые числа на определённом отрезке.

Напишем код:

```
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).
```

Зададим вопрос системе.

```
cifrsum(225588).
```
