at:tutorial:basic
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
at:tutorial:basic [2007/04/04 11:24] – * elisag | at:tutorial:basic [2007/04/05 10:01] – elisag | ||
---|---|---|---|
Line 1: | Line 1: | ||
< | < | ||
- | **IN PROGRESS** | + | **UNDER CONSTRUCTION!!** |
- | - Could it be possible that the "table of contents" | + | |
- | - (TOADD_1:) how to define and deal with multidimensional tables. | + | |
</ | </ | ||
Line 31: | Line 29: | ||
Reference is just done by evaluating the variable. | Reference is just done by evaluating the variable. | ||
- | ==== Tables ==== | + | ===== Tables |
As in Pico, indexed tables represent what other languages call arrays or lists. Tables are unidimensional and their indexes range from 1 to the size of the table. As variables, one can define, assign and refer to a table. Table definition is also made with the keyword **def** in the following form: | As in Pico, indexed tables represent what other languages call arrays or lists. Tables are unidimensional and their indexes range from 1 to the size of the table. As variables, one can define, assign and refer to a table. Table definition is also made with the keyword **def** in the following form: | ||
Line 61: | Line 59: | ||
>>[1, [1, 2, [" | >>[1, [1, 2, [" | ||
</ | </ | ||
+ | |||
+ | === Table Splicing === | ||
+ | |||
+ | TODO! | ||
==== Functions ==== | ==== Functions ==== | ||
Line 75: | Line 77: | ||
>>25 | >>25 | ||
</ | </ | ||
- | Functions can call themselves recusively and as in Pico, functions | + | This example also illustrates how functions are called. Calls to functions without parameters must also include the parenthesis. |
+ | |||
+ | Functions have access to the enclosing environment of its definition as shown in the following example. | ||
+ | < | ||
+ | >def counter := 0 | ||
+ | >>0 | ||
+ | > def inc() { counter := counter + 1} | ||
+ | >>< | ||
+ | >inc() | ||
+ | >>1 | ||
+ | </ | ||
+ | |||
+ | Functions can call themselves recusively and they can also be nested in the definitions | ||
< | < | ||
>def fac(n) { | >def fac(n) { | ||
Line 83: | Line 97: | ||
inner(n,1) | inner(n,1) | ||
} | } | ||
- | >>nil | + | >>< |
>fac(5) | >fac(5) | ||
>>120 | >>120 | ||
</ | </ | ||
- | Variables and other functions defined locally to a function | + | Variables and functions defined locally to functions |
+ | |||
+ | === Variable-Length Argument Functions === | ||
+ | |||
+ | You can create functions that take an arbitrary | ||
+ | < | ||
+ | >def sum(@args){ { | ||
+ | def total := 0; | ||
+ | foreach: { |el| total := total + el } in: args; | ||
+ | total} | ||
+ | >>< | ||
+ | > | ||
+ | >>6 | ||
+ | </ | ||
+ | |||
+ | When the //sum// function is called, the arguments are passed to the function in a table called //args// which can also be modified inside the body of the function. An alternative definition of the //sum// function follows: | ||
+ | < | ||
+ | >def sum(a, b, @rest){ { | ||
+ | def total := a + b; | ||
+ | foreach: { |el| total := total + el } in: rest; | ||
+ | total} | ||
+ | >>< | ||
+ | > | ||
+ | >>6 | ||
+ | </ | ||
+ | |||
+ | In this example the //sum// function accepts an arbitrary number of arguments as long as two arguments, //a// and //b//, are supplied. //a// and //b// are thus considered as mandatory arguments. A function can also declare optional arguments as shown below: | ||
+ | < | ||
+ | >def incr( number, step := 1){ number + step} | ||
+ | >>< | ||
+ | > | ||
+ | >>4 | ||
+ | > | ||
+ | >>6 | ||
+ | </ | ||
+ | |||
+ | ==== Closures and Blocks ==== | ||
+ | |||
+ | The function name can also be used just to refer the function but without calling it. TODO! | ||
Unlike Pico, AmbientTalk doesn' | Unlike Pico, AmbientTalk doesn' |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag