четверг, 30 января 2014 г.

О "моих скриптах"

Переделал тут объявление слов и обработку параметров.

Почти отказался от конструкции 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

Комментариев нет:

Отправить комментарий