Переделал тут объявление слов и обработку параметров.
Почти отказался от конструкции WordWorker.
Теперь можно написать так:
Или так:
Или так:
Или всё то же с функцией:
Теперь можно написать так:
Или так:
Или так:
Ну и понятно, что всё - рекурсивно:
Ну и IN-OUT параметры:
На самом деле это эквивалентно следующему коду:
Почти отказался от конструкции WordWorker.
Теперь можно написать так:
PROCEDURE P INTEGER IN aParam1 // - Объявляем первый параметр слева INTEGER IN aParam2 // - Объявляем второй параметр слева aParam1 + aParam2 WriteLn ; 1 3 P // - будет напечатано число 4
Или так:
PROCEDURE P INTEGER IN aParam1 // - Объявляем параметр слева ^ INTEGER IN aParam2 // - Объявляем параметр справа aParam1 + ( aParam2 DO ) WriteLn ; 1 P 3 // - будет напечатано число 4
Или так:
PROCEDURE P ^ INTEGER IN aParam1 // - Объявляем первый параметр справа ^ INTEGER IN aParam2 // - Объявляем второй параметр справа ( aParam1 DO ) + ( aParam2 DO ) WriteLn ; P 1 3 // - будет напечатано число 4
Или всё то же с функцией:
Теперь можно написать так:
INTEGER FUNCTION F INTEGER IN aParam1 // - Объявляем первый параметр слева INTEGER IN aParam2 // - Объявляем второй параметр слева Result := ( aParam1 + aParam2 ) ; 1 3 F WriteLn // - будет напечатано число 4
Или так:
INTEGER FUNCTION F INTEGER IN aParam1 // - Объявляем параметр слева ^ INTEGER IN aParam2 // - Объявляем параметр справа Result := ( aParam1 + ( aParam2 DO ) ) ; 1 F 3 WriteLn // - будет напечатано число 4
Или так:
INTEGER FUNCTION F ^ INTEGER IN aParam1 // - Объявляем первый параметр справа ^ INTEGER IN aParam2 // - Объявляем второй параметр справа Result := ( ( aParam1 DO ) + ( aParam2 DO ) ) ; F 1 3 WriteLn // - будет напечатано число 4
Ну и понятно, что всё - рекурсивно:
INTEGER FUNCTION F INTEGER IN aLeftParam1 // - Объявляем первый параметр справа INTEGER IN aLeftParam2 // - Объявляем второй параметр справа ^ INTEGER IN aRightParam1 // - Объявляем первый параметр справа ^ INTEGER IN aRightParam2 // - Объявляем второй параметр справа Result := ( aLeftParam1 + aLeftParam2 + ( aRightParam1 DO ) + ( aRightParam2 DO ) ) ; 1 2 F 3 4 WriteLn // - два параметра слева и два параметра справа // - будет напечатано число 7
Ну и IN-OUT параметры:
PROCEDURE INC INTEGER IN-OUT theIncremented theIncremented := theIncremented + 1 ; VAR X X := 10 INC X X WriteLn // - будет напечатано 11
На самом деле это эквивалентно следующему коду:
PROCEDURE INC ^ INTEGER theIncremented theIncremented ^:= ( theIncremented DO ) + 1 ; VAR X X := 10 INC X X WriteLn // - будет напечатано 11
Комментариев нет:
Отправить комментарий