Category:Fexl: Difference between revisions
No edit summary |
No edit summary |
||
Line 7:
Ultimately the core functions of Fexl are written in the [[C]] programming language. To write a new core function named "X" within Fexl, you simply create an appropriate C routine named "fexl_X". It automatically becomes available as a built-in Fexl function.
For example, here is the C routine which implements the classic '''S''' combinator (fusion), where (S x y z) = (x z) (y z):
<lang C>
value fexl_S(value f)
{
if (!f->L->L || !f->L->L->L) return f;
return A( A(f->L->L->R, f->R), A(f->L->R, f->R) );
}
</lang>
|
Revision as of 15:27, 20 April 2012
This programming language may be used to instruct a computer to perform a task.
See Also: |
|
---|
Fexl is a functional programming language designed to be compact, efficient, and customizable in embedded environments. It has no keywords, so whenever you see a symbol in a Fexl program, that symbol always refers to a function.
A symbol may be defined within a Fexl program, or its definition may be left entirely open. The definitions of all open symbols are supplied by a context. A context is a function which supplies definitions for symbols. A context function itself is written in Fexl.
A Fexl program may therefore be resolved inside an arbitrary context, giving whatever meanings you like to all its open symbols. This makes it easy to wrap a Fexl program in an enhanced or restricted context. For example, in a web context you probably don't want "delete_file" to be defined at all, at least not in its normal sense. So you would you would resolve the program in a highly restricted context which only provides a handful of highly safe functions, omitting all the dangerous ones.
Ultimately the core functions of Fexl are written in the C programming language. To write a new core function named "X" within Fexl, you simply create an appropriate C routine named "fexl_X". It automatically becomes available as a built-in Fexl function.
For example, here is the C routine which implements the classic S combinator (fusion), where (S x y z) = (x z) (y z):
<lang C> value fexl_S(value f)
{ if (!f->L->L || !f->L->L->L) return f; return A( A(f->L->L->R, f->R), A(f->L->R, f->R) ); }
</lang>
Pages in category "Fexl"
The following 6 pages are in this category, out of 6 total.