11. ���������� ���������� �������� �� ����������
��������� �� ����� DECL ����� ��������� ��-�������. ���������� ������ ��������� ������������ ���������� ����������� ��������. ��� ���� ��������� � �� ��������� ������� ���������� ��������� � (��������������� ��������� ������ ���� � ��). ������ ��������� � ��������� �������� ���������� ���������� ������ �������� PASCAL � ����������� �����������. ��� ������ T1: ������ ��������� � ����� ������ ����������� ���� �� ���, ��� ������������ �������� ���. ����� �������, � ����� DECL ������ ���������� ������������� ������� ������ ����������������. ���������� ����������� ���������� �� DECL ������.
11.1. ���������� �������� �:
������� 1. ���������� � �� ���� ���������� � �� ���������.
��������, ������ ���� ��������� ������ ��95 ����������:
PRD_AND():IF ����(X1,��95) ���(X1) THEN B:A(" ",X1);
��� ������ T!:PRD_AND() �� ����� ����� ������ �������� ��_1, ������� � ��������� � ������ ��95 - ����(��_1,��95) � ��������� - ���(��_1).
������� 2. ���������� � �� ���� ����������������� ������ ���������.
���������� ��������� ����� ��������� �� ���:
PRD_AND():IF ����(X1,��95) THEN T1:PRD_AND1(X1);
PRD_AND1(X1):IF ���(X1) THEN B:A(" ",X1);
�� ����� ����� ������ ���� �����.
11.2. ���������� �������� ��:
������� 1. ���������� �� ���� ��������� N:<��������>.
������ ���� ��������� ������ ��95 �� ����������:
PRD_NOT():IF ����(X1,��<95) N:���(X1) THEN B:BK() B:A(X1);
��� ������ T!:PRD_NOT() �� ����� ����� ������ �������� ��_1, ������� � ��������� � ������ ��95 - ����(��_1,��95) � � �� ��� ��������� ���(��_1).
������� 2. �� ���� ������������� ������ ���������.
������ ���� ��������� ������ ��95 �� ����������.
PRD_NOT():IF ����(X1,��95) THEN T1:PRD_NOT1(X1);
PRD_NOT1(X1):IF ���(X1) THEN;
PRD_NOT1(X1):IF THEN B:A(" ",X1);
��������� T!:PRD_NOT(X1) �������� ��������� ������ ��95:
��_1,... ������ ��������� PRD_NOT1(X1) ����������, ���� �� ����������� ������, �.�. ����� � �� ��� ��������� ���(��_1), � ����� �������� ��������� - �� ����������.
������� 3. ��������� �����������.
� ����� DECL ����������� ����������� ���� N:[...], ��� ������ ������ ����� ������ ��������� � ���������� � ��� ����, � ����� ����� ������ ���������. ����� �������� ����� ����������� ����������. � �� ������� ����������� ������������ ���������� ��������.
������ 11.1. ������ ������ ��95, ���� � ��� ��� ����������.
PRD_N():IF N:[����(X1,��95) ���(X1)] THEN B:BK() B:A("��95");
��������� PRD_N() ����������, ���� �� ��������� ��������� � ���������� ������� IF ����(X1,��95) ���(X1) THEN; � ��� �� ���������, ����� � ������ ��95 ��� ����������. ���� � ��95 ���� ���� ���� ������� ��������, �� ��������� ��������� ����������. ����������� � ���������� ������� ����� ��������. � �� ���� N: - ������. ��������� PRD_N() �� ����� ����������.
������ 11.2. ������ ������, � ������� ��� ����������.
PRD_N():IF ��(X2,_) N:[����(X1,X2) ���(X1)] THEN B:A(" ",X2);
��� ������ T!:PRD_N() �� ���� ��(X2,_) ����� ���� ������� �����. ����������� � ���������� ������� ����� ��������� ������, ��� ���� ���������.
�� ��������� ���������� ����������� ����� ���������:
PRD_N():IF ��(X2,_) N:[T1:PRD_N1(X2)] THEN B:BK() B:A("��95");
PRD_N1(X2):IF ����(X1,X2) ���(X1) THEN;
��� � � ���������� ������, ��������� PRD_N() ����� ����������, ���� �� ���� �� ����������� T1:PRD_N1(X2).
11.3. ���������� �������� ���:
������� 1. ���������� �� ���� ��������� N:<��������>.
������ ���� ��������� ���������� ��� ����������:
PRD_OR():IF ����(X1,_) N:[N:���(X1) N:���(X1)] THEN B:A(" ";,X1):
��� ������ T!:PRD_OR() �� ���� ����(X1,_) ����� ���� ������� ���������: X1 = ��_1, ��_2, ... ��������� PRD_OR() ���������� ��� X1 = ��_1, ���� �� ��������� ��������� � ���������� �������: IF N:���(��_1) N:���(��_1) THEN ..., �.�. ����� ��_1 ��� �������� ���(��_1), ��� �������� ���(��_1).
��������� ����������� ������� ���� ��� X1 = ��_1 ����� ������������������: "��� ������, ���� ��_1 �� ��� ���������� � �� ��� ����������".
������� 2. ���������� �� ���� ������������� ������ ���������.
PRD_OR():IF ����(X1,_) THEN T1:PRD_OR1(X1);
PRD_OR1(X1):IF ���(X1) THEN B:A(" ",X1);
PRD_OR1(X1):IF ���(X1) THEN B:A(" ",X1);
���� ������� X1=��_1 ��� ��������, ��� ��������, �� ���������� ��� ������ ��������� PRD_OR1(X1) ��� ������. � ����� ������� �� ����� ����� ����� ��� �������� - ��_1.
11.4. ������� ������:
����������� �� ���� ��������� ����������� � ��������� N:
������ ������, � ������� ��� �������� ���������.
PRD_ALL():IF ��(X2,_) N:[����(X1,X2) N:���(X1)] THEN B:A(" ",X2);
�� ���� ��(X2,_) ����� ���� ������� ����� X2=��95, ��96, ... ��������� PRD_ALL() ����� ����������, ���� �� ��������� ��������� ���������� ������� IF ����(X1,��95) N:���(X1) THEN; � ��� ���������, ����� � ������ ��95 ���-�� X1 �� ��������, � �� ���������, ���� ��� ���������. � ��������� ������ ��95 ����� ������ �� �����. ��������� ����������� ������� ���� ��� X2=��95 ����� �������� ������������������: "��� ������ �������� � ������ ��95, ���� �� ��� �� ����������".
������ 11.3. ������ ��� ������, � ������� ��� �� ������ ���������.
PRD_ALL1():IF ��(X2,_) N:[����(X1,X2) ���(X1)] THEN B:A(" ",X2);
��������� T!:PRD_ALL1() ����� ���������� ��� X2=��95, ���� �� ��������� ��������� IF ����(X1,��95) ���(X1) THEN ...; � ��� �� ���������, ����� � ������ ��95 ��� ����������.
�� ��������� ���������� ����� DECL ����������� ������� ���������� ������ � ����������� N:. ��������, N:[N:[...] N:[...]] ��� N:[... N:[...]]. ���������� ���������� N:[...] �� ��������������. �� ������� ����������� �� �����������.
���������� ������|��������� ������