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 09:18] – * elisag | at:tutorial:basic [2007/04/05 09:59] – 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 33: | Line 31: | ||
==== Tables ==== | ==== Tables ==== | ||
- | As in Pico, indexed tables represent what other languages call arrays or lists. Tables 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 |
< | < | ||
def t[ < | def t[ < | ||
Line 41: | Line 39: | ||
>def z := 0 | >def z := 0 | ||
>>0 | >>0 | ||
- | > | + | > |
>>[1, 2, 3, 4, 5] | >>[1, 2, 3, 4, 5] | ||
</ | </ | ||
- | Table entries | + | Although there is no special constructor for definition of multidimensional tables, a table entry can contain another |
+ | |||
+ | < | ||
+ | >def vocals := [" | ||
+ | >> | ||
+ | > | ||
+ | >>[1, 2, [" | ||
+ | > | ||
+ | >>" | ||
+ | </ | ||
+ | |||
+ | As shown in the definition of the varible " | ||
+ | |||
+ | <code> | ||
+ | >[ 1, table, " | ||
+ | >>[1, [1, 2, [" | ||
+ | </ | ||
+ | |||
+ | === Table Splicing === | ||
+ | |||
+ | TODO! | ||
==== Functions ==== | ==== Functions ==== | ||
- | As variables and tables, functions are defined with the keyworkd | + | As variables and tables, functions are defined with the keyword **def** in the form of: |
< | < | ||
def functionname( < | def functionname( < | ||
</ | </ | ||
- | The argument list is just a list of local variables which are always evaluated one by one from left to right. | + | The argument list is just a list of local variables which are always evaluated one by one from left to right. A basic function looks like this: |
< | < | ||
>def square (x) { x*x } | >def square (x) { x*x } | ||
Line 59: | Line 77: | ||
>>25 | >>25 | ||
</ | </ | ||
- | As usual, | + | This example also illustrates how functions |
+ | |||
+ | 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 | ||
< | < | ||
>def fac(n) { | >def fac(n) { | ||
Line 67: | Line 97: | ||
inner(n,1) | inner(n,1) | ||
} | } | ||
- | >>nil | + | >>< |
>fac(5) | >fac(5) | ||
>>120 | >>120 | ||
</ | </ | ||
- | Note that variables and functions defined locally to functions are only visible in the scope of the function where there were defined. Notice also that a function name can also be used just to refer the function but without calling it. | ||
- | Unlike Pico, AmbientTalk doesn' | + | Variables and functions defined locally to functions are only visible in the scope of the function where there were defined. |
+ | |||
+ | === 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' | ||
< | < | ||
>def sum := 0 | >def sum := 0 |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag