Unimperative Programming Language - Teaser
The following is from my latest project which is a foray into functional programming. Any comments or suggestions?
The Unimperative Programming Language
by Christopher Diggins
Unimperative is a simple programming language, which supports a mix of procedural programming and functional programming. In Unimperative the primary data type is a function. The sequence of evaluation in Unimperative matters somewhat, and function parameters are evaluated left to right.
Unimperative has a surprise twist, which I will save for the end
Comparing to Scheme
Unimperative is quite similar to Scheme. In Scheme we can write a factorial function as:
(define factorial (lambda (n) (if (zero? n) 1 (* n (fact (- n 1))))))
In Unimperative we can write the equivalent function as:
Function factorial = (IfZero, _1, 1, (Mult, _1, (Self, (Dec, _1))));
In many language we call functions by writing:
In the Unimperative programming language we instead write:
(MyFxn, x, y)
The first element following an open paranthesis, and followed by a comma, is always treated as a function which will be evaluated. The elements which follow are passed as arguments to the function.
Other functions after the first one in a list are not evaluate:
This evaluates the function MyFxn and passes the OtherFxn as a parameter without evaluating it.
A function must be followed by at least one argument in order to be evaluated. The evaluation operator is the combination of paranthesis and comma:
The following code does not evaluate MyFxn:
If we wanted to evaluate MyFxn we would have to write:
Alternatively we could also write:
To define a function in Unimperative we do so as follows:
Function MyFxn = (Add, _1, _2);
The _1 and _2 are place holders which refer to the first and second argument respectively.
An Interesting Twist
The Unimperative programming language has a surpise: it is completely legal C++, and doesn't use any macros! An Unimperative library will be available soon as part of the next OOTL ( Object Oriented Template Library ) release from http://www.ootl.org
Active forum topics
New forum topics