OGNL has a simplified lambda-expression syntax, which lets you write simple functions. It is not a full-blown lambda calculus, because there are no closures---all variables in OGNL have global scope and extent.
For example, here is an OGNL expression that declares a recursive factorial function, and then calls it:
#fact = :[#this<=1? 1 : #this*#fact(#this-1)], #fact(30H)
The lambda expression is everything inside the brackets. The #this variable holds the argument to the expression, which is initially 30H
, and is then one less for each successive call to the
expression.
OGNL treats lambda expressions as constants. The value of a lambda expression is the AST that OGNL uses as the parsed form of the contained expression.