Функциональное и логическое программирование
Автор: borrenych • Декабрь 10, 2022 • Контрольная работа • 646 Слов (3 Страниц) • 180 Просмотры
Функциональное и логическое программирование
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) |
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 | {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) |
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 |
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) |
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 |
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 | {} | - | - | В резольвенте ничего => успешно |
...