Alya Refal interpreter

in-alphabet (s.x) e.A1 s.x e.A2 -> 'T';
in-alphabet e.o -> 'F';

{Logical 'and' function}
& 'TT' -> 'T';
& e.o -> 'F';

is-digit s.x -> <in-alphabet (s.x) '0123456789'>;

is-number s.x -> <is-digit s.x>;
is-number s.x e.t -> <& <is-digit s.x> <is-number e.t>>;

= {Initial view field is marked with '='}
<is-number '1234'>

Download Language manual List of built-in functions

Refal is an interpreted programming language which is suitable for symbolic computations. It was created by Valentin Turchin in 1968.

This implementation was started because Refal-5, which is the only implementation which worked on my Linux machine, is died and even proprietary. Also, it is semi-compiled (similar to Java), which is not convenient nor useful in practice, as there is no real Refal programs which require such optimizations.

Alya have some differences from it, such as sentence-based syntax.

Short syntax description is provided in README file. Also, some examples are located in examples/ subdirectory.

There is a book about Refal-5, which gives the basics of Refal programming.

Supported features

  • Execution of single-file programs
  • REPL
  • IO functions on stantard input and output, command line parameters
  • verbose execution (non-interactive debugger)

What will be added in later versions

  • Where-clauses from REFAL-5
  • Arithmetic functions
  • Disk file IO, as well as stderr; expression reader and writer
  • Program self-modification functions
  • Modules

Why it is named so?

I had this Alya is mind :-)

Also, it stands for ``Yet Another RefAL''. The syllables are reversed as in ``REFAL'' itself, which stands for ``Algorithmic Language of REcursive Functions''.