all repos — mn @ 62192baa78534dfe25eaf16954e3c695dc36ccbd

A truly minimal concatenative programming language.

docs/learn-operators.md

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
-----
content-type: "page"
title: "Learn: Operators"
-----
{@ _defs_.md || 0 @}

Every {{m}} program needs _operators_ to:

* Manipulate elements on the stack
* Perform operations on data
* Provide side effects (read/print to standard input/output/files, etc.)

An mn symbol is a single word that is either provided by mn like `dup` or defined by the user. User-defined symbols must:

* Start with a letter
* Contain zero or more letters, numbers and/or underscores.

To define a new operator symbol, you can use the {#link-symbol||lambda#} symbol. For example, the following symbol defines a quotation that can be used to calculate the square value of a number.

     (dup *) (square) lambda
     
Note that this feels like using {#link-symbol||let#}, but the main difference between {#link-symbol||lambda#} and {#link-symbol||let#} is that `lambda` only works on quotations and it doesn't auto-quote them, so that they are immediately evaluated when the corresponding symbol is pushed on the stack.

> %tip
> Tip
> 
> You can use {#link-symbol||lambda-bind#} to re-set a previously set lambda.