Category:Fexl: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(14 intermediate revisions by 3 users not shown)
Line 1:
{{language}}
|site=http://fexl.com}}
[http://fexl.com Fexl] is a [[functional programming]] language designed to be compact, efficient, and customizable in embedded environments. ItIts hasimplementation noaims keywords,to sobe wheneverthe youthinnest seepossible afunctional symbolprogramming inlayer abuilt Fexlon program, that symbol always refers totop aof function[[C]].
 
Fexl 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 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 itself 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.
 
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>
Anonymous user