PROCEDURE .To
IN aLowBound
IN aHighBound
FUNCTOR IN aLambda
if ( aLowBound <= aHighBound ) then
// - граничное условие
begin
aLowBound aLambda DO // - вызываем aLambda на aLowBound
Inc aLowBound // - увеличиваем aLowBound
aLowBound aHighBound aLambda call.me
// - вызываем себя рекурсивно
end // ( aLowBound <= aHighBound )
; // .To
FunctorToIterator ( 1 10 ) .To .for .Out
// - печатает числа от 1 до 10
FunctorToIterator ( 1 10 ) .To
.filter ( <> 2 )
.for .Out
// - печатает числа от 1 до 10, исключая 2
FunctorToIterator ( 1 10 ) .To
.filter ( <> 2 )
.map ( 1 + )
.for .Out
// - печатает числа от 2 до 11, исключая 3
То же самое, но с параметром справа:
PROCEDURE To
IN aLowBound
FUNCTOR IN aLambda
Right IN aHighBound
if ( aLowBound <= aHighBound ) then
// - граничное условие
begin
aLowBound aLambda DO // - вызываем aLambda на aLowBound
Inc aLowBound // - увеличиваем aLowBound
aLowBound aLambda call.me aHighBound
// - вызываем себя рекурсивно
end // ( aLowBound <= aHighBound )
; // To
FunctorToIterator 1 To 10 .for .Out
// - печатает числа от 1 до 10
FunctorToIterator 1 To 10
.filter ( <> 2 )
.for .Out
// - печатает числа от 1 до 10, исключая 2
FunctorToIterator 1 To 10
.filter ( <> 2 )
.map ( 1 + )
.for .Out
// - печатает числа от 2 до 11, исключая 3
Немножко косметики:
ARRAY FUNCTION To
IN aLowBound
Right IN aHighBound
PROCEDURE InnerTo
IN aLowBound
FUNCTOR IN aLambda
Right IN aHighBound
if ( aLowBound <= aHighBound ) then
// - граничное условие
begin
aLowBound aLambda DO // - вызываем aLambda на aLowBound
Inc aLowBound // - увеличиваем aLowBound
aLowBound aLambda call.me aHighBound
// - вызываем себя рекурсивно
end // ( aLowBound <= aHighBound )
; // InnerTo
FunctorToIterator aLowBound InnerTo aHighBound
>>> Result
; // To
1 To 10 .for .Out
// - печатает числа от 1 до 10
1 To 10
.filter ( <> 2 )
.for .Out
// - печатает числа от 1 до 10, исключая 2
1 To 10
.filter ( <> 2 )
.map ( 1 + )
.for .Out
// - печатает числа от 2 до 11, исключая 3
Ещё косметики:
ARRAY FUNCTION To
IN aLowBound
Right IN aHighBound
PROCEDURE InnerTo
IN aLowBound
FUNCTOR IN aLambda
Right IN aHighBound
if ( aLowBound <= aHighBound ) then
// - граничное условие
begin
aLowBound aLambda DO // - вызываем aLambda на aLowBound
Inc aLowBound // - увеличиваем aLowBound
aLowBound aLambda call.me aHighBound
// - вызываем себя рекурсивно
end // ( aLowBound <= aHighBound )
; // InnerTo
FunctorToIterator aLowBound InnerTo aHighBound
>>> Result
; // To
PROCEDURE for
ARRAY Right anArray
FUNCTOR Right aLambda
anArray .for> aLambda
; // for
for ( 1 To 10 )
.Out
// - печатает числа от 1 до 10
for
( 1 To 10
.filter ( <> 2 )
)
.Out
// - печатает числа от 1 до 10, исключая 2
for
( 1 To 10
.filter ( <> 2 )
.map ( 1 + )
)
.Out
// - печатает числа от 2 до 11, исключая 3
Комментариев нет:
Отправить комментарий