Quantcast
Channel: Designing ParaSail, a new programming language
Viewing all articles
Browse latest Browse all 48

Rev 3.4 alpha 0.5 release of ParaSail now supports lambda expressions, etc.

$
0
0
We just released a new version (3.4 alpha 0.5) of the ParaSail compiler and virtual machine, available at the same URL as before:

    http://bit.ly/Mx9DRb

This new release includes support for declaring and passing operations as parameters of other operations.  The actual operation passed can be a nested operation, an operation of a module, or a lambda expression.  (Passing operations as parameters in module instantiations is not yet supported.)

Additional updates in this release:
  1. optional outputs of an operation are now default initialized to the null value;
  2. nested operations can now correctly make up-level references to variables of enclosing operations;
  3. the Univ_String module now includes operations To_Vector and From_Vector for converting a Univ_String to/from a Vector of Univ_Characters; this is useful because Univ_String values are immutable;
  4. the ZString module includes corresponding operations To_ZVector and From_ZVector for converting to/from a ZVector of Univ_Characters.
Here is an example of declaring an operation as a parameter of another operation, and passing a lambda expression as the actual parameter in a call:
interface Mapper<Element_Type is Assignable<>> is
func Apply
(func Op(Input : Element_Type) -> Element_Type;
Vec : Vector<Element_Type>)
-> Vector<Element_Type>;
// Apply "Op" to each element of vector and return the result
endinterface Mapper;

class Mapper is
exports
func Apply
(func Op(Input : Element_Type) -> Element_Type;
Vec : Vector<Element_Type>)
-> Vector<Element_Type> is
// Apply "Op" to each element of vector and return the result
return [for I in 1..Length(Vec) => Op(Vec[I])];
endfunc Apply;
endclass Mapper;

. . .

type Univ_Int_Mapper is Mapper<Univ_Integer>;

const Squares : Vector<Univ_Integer> := [for I in 1..100 => I ** 2];
const Triple_Squares : Vector<Univ_Integer> :=
Univ_Int_Mapper::Apply
(lambda (X : Univ_Integer) -> Univ_Integer is (X * 3), Squares);
// Triple each element of Squares

Viewing all articles
Browse latest Browse all 48

Trending Articles