assert(Clause).
 

assert(Clause). - добавление предложения в конец логической программы.

Clause

Логическое предложение

 

Пример:

Сохраненить геометрическое построение, выполненное средствами Симплекса, в логической программе в виде множества предикатов вида save(X).

Построение, преобразуемое в множество предикатов логической програмы (задано средствами геометрического программирования Симплекса):

1
Точка p1 задана координатами 0 и 0 .
2
Прямая o1 задана точкой p1 и углом rect к оси OX.
3
Прямая o3 задана точкой p1 и углом 0 к оси OX.
4
Точка p2 принадлежит объекту o1 с параметром принадлежности 1.39 .
5
Окружность d1 задана центром p2 и радиусом 42.511763 .
6
Окружность d2 задана центром p1 и радиусом 87.688369 .
7
Прямая o4 касается окружностей d2 и d1 в точках p3 и p4 .
8
Прямая o5 касается окружностей d1 и d2 в точках p7 и p8 .
9
Дуга p9 окружности d1 задана начальной точкой p4 и конечной точкой p7 .
10
Дуга p10 окружности d2 задана начальной точкой p8 и конечной точкой p3 .
11
Контур w2 построен на объектах o5, p10, o4, p9
12
Точка p11 принадлежит объекту w2 с параметром принадлежности 1.2478879 .
13
Точка p12 принадлежит объекту w2 с параметром принадлежности 1.7576387 .
14
Точка p13 принадлежит объекту w2 с параметром принадлежности 3.7606057 .
15
Точка p14 принадлежит объекту w2 с параметром принадлежности 3.2428504 .
16
Прямоугольный контур w3 по точке p13 с размерами 10 и 30 .
17
Прямоугольный контур w4 по точке p14 с размерами 10 и 30 .
18
Прямоугольный контур w5 по точке p11 с размерами 10 и 30 .
19
Прямоугольный контур w6 по точке p12 с размерами 10 и 30 .
20
Контур w7 есть объединение контуров w4, w3, w5, w6 .
21
Контур w8 есть отсечение контура w2 контуром w7 .
22
Штриховка f1 на контуре w8 по направлению 45 с шагом 10 .

Цель: @r(In,Out,Fm,F,A),eq(X,@r(In,Out,Fm,F,A)),assert(save(X)).

Сгенерированная логическая программа:

save(@r([[0], [0]], [p1], '0', 'Точка задана координатами', 'Главный')).
save(@r([[p1], [90]], [o1], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный')).
save(@r([[p1], [0]], [o3], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный')).
save(@r([[o1], [1.39]], [p2], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[p2], [42.51]], [d1], '0', 'Окружность задана центром и радиусом', 'Главный')).
save(@r([[p1], [87.69]], [d2], '0', 'Окружность задана центром и радиусом', 'Главный')).
save(@r([[d2], [d1]], [o4, p3, p4], '0', '', 'Главный')).
save(@r([[d1], [d2]], [o5, p7, p8], '0', '', 'Главный')).
save(@r([[d1], [p4], [p7]], [p9], '0', 'Дуга на окружности', 'Главный')).
save(@r([[d2], [p8], [p3]], [p10], '0', 'Дуга на окружности', 'Главный')).
save(@r([[o5, p10, o4, p9]], [w2], '0', 'Контур из компонентов', 'Главный')).
save(@r([[w2], [1.248]], [p11], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[w2], [1.758]], [p12], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[w2], [3.761]], [p13], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[w2], [3.243]], [p14], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[p13], [10], [30]], [w3], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[p14], [10], [30]], [w4], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[p11], [10], [30]], [w5], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[p12], [10], [30]], [w6], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[w4, w3, w5, w6]], [w7], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[w2], [w7]], [w8], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[w8], [45], [10]], [f1], '0', 'Прямоугольный контур', 'Главный')).

Листинг результата

#

In

Out

Fm

F

A

X

1

[[0], [0]]

[p1]

'0'

'Точка задана координатами'

'Главный'

@r([[0], [0]], [p1], '0', 'Точка задана координатами', 'Главный')

2

[[p1], [90]]

[o1]

'0'

'Прямая проведена через точку под углом к оси OX'

'Главный'

@r([[p1], [90]], [o1], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный')

3

[[p1], [0]]

[o3]

'0'

'Прямая проведена через точку под углом к оси OX'

'Главный'

@r([[p1], [0]], [o3], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный')

4

[[o1], [1.39]]

[p2]

'0'

'Точка принадлежит объекту'

'Главный'

@r([[o1], [1.39]], [p2], '0', 'Точка принадлежит объекту', 'Главный')

5

[[p2], [42.51]]

[d1]

'0'

'Окружность задана центром и радиусом'

'Главный'

@r([[p2], [42.51]], [d1], '0', 'Окружность задана центром и радиусом', 'Главный')

6

[[p1], [87.69]]

[d2]

'0'

'Окружность задана центром и радиусом'

'Главный'

@r([[p1], [87.69]], [d2], '0', 'Окружность задана центром и радиусом', 'Главный')

7

[[d2], [d1]]

[o4, p3, p4]

'0'

''

'Главный'

@r([[d2], [d1]], [o4, p3, p4], '0', '', 'Главный')

8

[[d1], [d2]]

[o5, p7, p8]

'0'

''

'Главный'

@r([[d1], [d2]], [o5, p7, p8], '0', '', 'Главный')

9

[[d1], [p4], [p7]]

[p9]

'0'

'Дуга на окружности'

'Главный'

@r([[d1], [p4], [p7]], [p9], '0', 'Дуга на окружности', 'Главный')

10

[[d2], [p8], [p3]]

[p10]

'0'

'Дуга на окружности'

'Главный'

@r([[d2], [p8], [p3]], [p10], '0', 'Дуга на окружности', 'Главный')

11

[[o5, p10, o4, p9]]

[w2]

'0'

'Контур из компонентов'

'Главный'

@r([[o5, p10, o4, p9]], [w2], '0', 'Контур из компонентов', 'Главный')

12

[[w2], [1.248]]

[p11]

'0'

'Точка принадлежит объекту'

'Главный'

@r([[w2], [1.248]], [p11], '0', 'Точка принадлежит объекту', 'Главный')

13

[[w2], [1.758]]

[p12]

'0'

'Точка принадлежит объекту'

'Главный'

@r([[w2], [1.758]], [p12], '0', 'Точка принадлежит объекту', 'Главный')

14

[[w2], [3.761]]

[p13]

'0'

'Точка принадлежит объекту'

'Главный'

@r([[w2], [3.761]], [p13], '0', 'Точка принадлежит объекту', 'Главный')

15

[[w2], [3.243]]

[p14]

'0'

'Точка принадлежит объекту'

'Главный'

@r([[w2], [3.243]], [p14], '0', 'Точка принадлежит объекту', 'Главный')

16

[[p13], [10], [30]]

[w3]

'0'

'Прямоугольный контур'

'Главный'

@r([[p13], [10], [30]], [w3], '0', 'Прямоугольный контур', 'Главный')

17

[[p14], [10], [30]]

[w4]

'0'

'Прямоугольный контур'

'Главный'

@r([[p14], [10], [30]], [w4], '0', 'Прямоугольный контур', 'Главный')

18

[[p11], [10], [30]]

[w5]

'0'

'Прямоугольный контур'

'Главный'

@r([[p11], [10], [30]], [w5], '0', 'Прямоугольный контур', 'Главный')

19

[[p12], [10], [30]]

[w6]

'0'

'Прямоугольный контур'

'Главный'

@r([[p12], [10], [30]], [w6], '0', 'Прямоугольный контур', 'Главный')

20

[[w4, w3, w5, w6]]

[w7]

'0'

'Объединение контуров одноаргументное'

'Главный'

@r([[w4, w3, w5, w6]], [w7], '0', 'Объединение контуров одноаргументное', 'Главный')

21

[[w2], [w7]]

[w8]

'0'

'Отсечение контуров'

'Главный'

@r([[w2], [w7]], [w8], '0', 'Отсечение контуров', 'Главный')

22

[[w8], [45], [10]]

[f1]

'0'

'Штриховка контура линейная'

'Главный'

@r([[w8], [45], [10]], [f1], '0', 'Штриховка контура линейная', 'Главный')

Пример 2

Удалить копию построения, сохраненную в виде предикатов save в предыдущем примере, из логической программы.

Цель:

save(@r(In, Out, Fm, F, A)), retract(save(@r(In, Out, Fm, F, A))).