Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Функциональное и логическое программирование

Автор:   •  Декабрь 10, 2022  •  Контрольная работа  •  646 Слов (3 Страниц)  •  179 Просмотры

Страница 1 из 3

Функциональное и логическое программирование


35409/20201
Баранов Андрей Олегович


Модульная арифметика

1. n_number(0).

2. n_number(s(X)) :- n_number(X).

3. plus(0, X, X) :- n_number(X).

4. plus(s(X), Y, s(Z)) :- plus(X, Y, Z).

5. times(0, X, 0).

6. times(s(X), Y, Z) :- times(X, Y, W), plus(Y, W, Z).

Модель недетерминированная

Экспонента:

Описание:

exp(A, B, C) – предикат для возведения числа A в степень B (), где [pic 1]

  • A – основание, ≥ 0;
  • B – показатель, ≥ 0;
  • C – результат возведения числа в степень, ≥ 0;
  • , [pic 2][pic 3]

7. exp(Y, 0, s(0)).

8. exp(Y, s(X), Z) :- exp(Y, X, W), times(W, Y, Z)


?- exp(2, s(0), 2).

Резольвента

Правило

Подстановка

Комментарий

1

{exp(2, s(0), 2)}

exp(Y1, s(X1), Z1) :- exp(Y1, X1, W1), times(W1, Y1, Z1).

{Y1 = 2, X1 = 0, Z1 = 2}

s(0) ≠ 0 (Подходит только 8-е правило)  

2

{exp(2, 0, W1), times(W1, 2, 2)}

exp(Y2, 0, s(0)).

{Y2 = 2, W1 = s(0)}

Случайно выбрана 1-я подцель; 0 ≠ s(X)
(Подходит только 7-е правило)

3

{times(s(0), 2, 2)}

times(s(X2), Y3, Z2) :- times(X2, Y3, W2), plus(Y3, W2, Z2).

{Y3 = 2, X2 = 0, Z2 = 2}

 s(0) ≠ 0 (Подходит только 6-е правило)

4

{times(0, 2, W2), plus(2, W2, 2)}

times(0, X3, 0).

{X3 = 2, W2 = 0}

Случайно выбрана 1-я подцель; 0 ≠ s(X)
(по 5-му правилу, как единственному подходящему в этом случае)

5

{plus(2, 0, 2)}

plus(s(X4), Y4, s(Z3)) :- plus(X4, Y4, Z3).

{X4 = s(0), Y4 = 0,      Z3 = s(0)}

 2  ≠ 0

(Подходит только 4е правило)

6

{plus(s(0), 0, s(0))}

plus(s(X5), Y5, s(Z4)) :- plus(X5, Y5, Z4).

{X5 = 0, Y5 = 0, Z4 = 0}

s(0) ≠ 0

(Подходит только 4-е правило)

7

{plus(0, 0, 0)}

plus(0, X6, X6) :- n_number(X6).

{X6 = 0}

 0 ≠ s(X)
(Подходит только 3-е правило)

8

{n_number(0)}

n_number(0).

{}

Нет переменных, Подходит только 1-е правило

9

{}

-

-

В резольвенте ничего => успешно

Деление с остатком

Описание:

div(A, B, C, D) – предикат для деления с остатком числа A на число B (), где[pic 4]

  • A – делимое, ≥ 0;
  • B – делитель, > 0;
  • C – частное, ≥ 0;
  • D – остаток, ≥ 0;
  •  с остатком 0; A / B = C с остатком D → A = C * B + D[pic 5]

9. div(0, Y, 0, 0).

10. div(X, Y, Z, W) :- times(Z, Y, Q), plus(Q, W, X).

?- div(3, 2, 1, 1)

Резольвента

Правило

Подстановка

Комментарий

1

{div(3, 2, 1, 1)}

div(X1, Y1, Z1, W1) :- times(Z1, Y1, Q1), plus(Q1, W1, X1).

{X1 = 3, Y1 = 2,   Z1 = 1, W1 = 1}

 3 ≠ 0
(В данном случае подходит только 10-е правило)

2

{times(1, 2, Q1), plus(Q1, 1, 3)}

times(s(X2), Y2, Z2) :- times(X2, Y2, W2), plus(Y2, W2, Z2).

{X2 = 0, Y2 = 2,   Z2 = Q1}

Случайным образом выбрана 1-я подцель

 1 ≠ 0

(Подходит только 6-е правило)

3

{times(0, 2, W2), plus(2, W2, Q1), plus(Q1, 1, 3)}

times(0, X3, 0).

{X3 = 2, W2 = 0}

Случайно выбрана 1-я подцель;

0 ≠ s(X)
(Используем единственное подходящее 5-е правило)

4

{plus(2, 0, Q1), plus(Q1, 1, 3)}

plus(s(X4), Y3, s(Z3)) :- plus(X4, Y3, Z3).

{X4 = 1, Y3 = 0,   Q1 = s(Z3)}

Случайно выбрана 1-я подцель

2 ≠ 0

(Подходит только 4-е правило)

5

{plus(1, 0, Z3), plus(s(Z3), 1, 3)}

plus(s(X5), Y4, s(Z4)) :- plus(X5, Y4, Z4).

{X5 = 0, Y4 = 0,   Z3 = s(Z4)}

Случайно выбрана 1-я подцель

1 ≠ 0

(Подходит только 4-е правило)

6

{plus(0, 0, Z4), plus(s(s(Z4)), 1, 3)}

plus(0, X6, X6) :- n_number(X6).

{X6 = 0,                Z4 = X6 = 0}

Случайно выбрана 1-я подцель

0 ≠ s(X)

(Использовали единственное подходящее 3-е правило)

7

{n_number(0), plus(s(s(0)), 1, 3)}

plus(s(X7), Y5, s(Z5)) :- plus(X7, Y5, Z5).

{X7 = s(0), Y5 = 1,   Z5 = 2}

Случайно выбрана 2-я подцель

s(s(0)) ≠ 0

(Подходит только 4-е правило)

8

{n_number(0), plus(s(0), 1, 2)}

plus(s(X8), Y6, s(Z6)) :- plus(X8, Y6, Z6).

{X8 = 0, Z6 = 1}

Случайно выбрана 2-я подцель

 s(0) ≠ 0
(Подходит только 4-е правило)

9

{n_number(0), plus(0, 1, 1)}

plus(0, X9, X9) :- n_number(X9).

{X9 = 1}

Случайно выбрана 2-я подцель

 0 ≠ s(X)

Подходит только 3-е правило

10

{n_number(0), n_number(1)}

n_number(0).

{}

Случайно выбрана 1-я подцель

 0 ≠ s(X)

(Подходит только 1-е правило)

переменных нет

11

{n_number(1)}

n_number(s(X10)) :- n_number(X10).

{X10 = 0}

Единственное подходящее 2-е правило

s(0) ≠ 0

12

{n_number(0)}

n_number(0).

{}

Единственное подходящее 1-е правило

(0 ≠ s(X)

переменных нет

13

{}

-

-

В резольвенте ничего => успешно

...

Скачать:   txt (5.7 Kb)   pdf (93.3 Kb)   docx (742.3 Kb)  
Продолжить читать еще 2 страниц(ы) »
Доступно только на Essays.club