Blocos de Primeira Classe

O Prelude AdvPL também abstrai blocos de primeira classe em forma de funções de primeira classe, utilizando uma sintaxe similar a OCaml ou Livescript. Blocos são, por padrão, definidos em AdvPL como { |Param| Expression }. A única função dessa abstração é aplicar um syntactic sugar para Fun ( Param ) -> Expression.

Nota: Lambda ( Param ) -> Expression também é válido.

Definição Formal

fun ::= Fun ( [ <ident> [, <ident> [, <ident> ] ] ] ) -> <expr>
lambda ::= Lambda ( [ <ident> [, <ident> [, <ident> ] ] ] ): <expr>

Exemplos

Vamos realizar alguns testes com operações simples:

1
2
3
4
5
6
7
8
#include "prelude.ch"

Function TestBlocks()
   Local bAdd      := Fun ( X, Y ) -> X + Y
   Local bToString := Lambda ( X ): Str( X )

   Alert( Eval( bToString, Eval( bAdd, 10, 20 ) ) ) // => "30"
   Return 0