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 10:56] – 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 47: | Line 45: | ||
< | < | ||
- | >def vocals := [1, t, " | + | >def vocals := [" |
>> | >> | ||
- | >t[3] := vocals; | + | >table[3] := vocals |
>>[1, 2, [" | >>[1, 2, [" | ||
- | >t[3][2] | + | >table[3][2] |
>>" | >>" | ||
</ | </ | ||
As shown in the definition of the varible " | As shown in the definition of the varible " | ||
+ | |||
+ | < | ||
+ | >[ 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 70: | 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 78: | 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