Introduction
------------
This  workspace was written as a test during the development of D-functions. The
application  is not in itself useful other than to provide examples of some cod-
ing techniques that were discovered along the way.

The  result illustrates that while D-functions are extremely simple, they can be
used  to write significant programs - in this case a compiler/interpreter for an
admittedly almost negligible lazy functional language.

It  is worth remarking that during the coding of this workspace, it wasn't found
necessary  to  use  a  branch  or  control structure other than D-functions' own
Guard.  Perhaps  more surprising: there isn't a single instance of a destructive
assignment.  In  other  words,  a name is assigned only once; nothing varies, so
strictly speaking, there are no variables!

Destructive assignments are certainly allowed within D-functions, but Functional
Programming  purists tend to avoid them in the same way that we try to avoid too
much  branching.  If we adhere to this convention, we can read the symbol '←' as
"is". For example:

    N←1+M   ⍝ "N IS one-more-than M" states the value of N, whereas:
    N←1+N   ⍝ "N IS one-more-than N" is a contradiction.

To  see  some  examples  of D-functions, examine and trace those defined in this
workspace. For example, trace:

      parse'a=bc'

If (just for fun), you would like to experiment with the little language itself,
there's a sample script 'Example'. To see it evaluated, type:

      min Example

Min  takes  either a null vector right argument or a character matrix script for
processing  prior  to  interactive  input.  Definitions accumulated during a Min
session  are  returned  on exit as a shy result. This environment can be reinput
to a subsequent session via min's optional left argument.

For more detail on the background of min:

      )ed Background

Exercises
---------
You might like to write min scripts for :

- Predecessor (decrement).
- Parity: even 0, odd 1.
- Difference (subtraction).
- Integer quotient and remainder.
- Relational functions: < ≤ = ≥ > ≠.
- Boolean functions: ∧ ∨ ⍲ ⍱ ~.
- N'th Fibonacci number.
- Highest common factor.
- Prime: returns 1 if argument is prime.

Who knows, one day we might see:

  "$$$$$ - Wanted: Min Programmer - $$$$$"
  "This year's Min conference will be held in sunny ···"
  "comp.lang.min"
  ···
:-)

Back to: contents