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/17 16:43] – tvcutsem | at:tutorial:basic [2007/04/17 17:04] – tvcutsem | ||
---|---|---|---|
Line 19: | Line 19: | ||
</ | </ | ||
- | Variable definitions can include an initialization expression that immediately initializes the variable. Variable assignment is performed by means of the well-known | + | Variable definitions can include an initialization expression that immediately initializes the variable. Variable assignment is performed by means of the well-known |
< | < | ||
Line 40: | Line 40: | ||
===== Tables ===== | ===== Tables ===== | ||
- | Indexed tables represent | + | The //table// is AmbientTalk' |
< | < | ||
- | def t[ <size> ] { <expression> } | + | def t[ <sizeexpression> ] { <initexpression> } |
</ | </ | ||
- | This means that the <expression> will be evaluated | + | This constructs a table, |
< | < | ||
>def z := 0 | >def z := 0 | ||
Line 52: | Line 53: | ||
</ | </ | ||
- | Although there is no special constructor for definition of multidimensional tables, a table entry can contain another table. This is internally stored as a unidimensional | + | Although there is no special constructor for definition of multidimensional tables, a table entry can contain another table. This is internally stored as a one-dimensional |
< | < | ||
>def vowels := [" | >def vowels := [" | ||
Line 62: | Line 63: | ||
</ | </ | ||
- | As shown in the definition of the varible //vowels//, evaluating a series of comma-separated data types between square brackets (aka a tabulation) results | + | As shown in the definition of the variable '' |
< | < | ||
Line 71: | Line 72: | ||
==== Table Splicing ==== | ==== Table Splicing ==== | ||
- | AmbientTalk provides the operator @ to splice tables into surrounding table expressions. | + | AmbientTalk provides the // |
< | < | ||
> | > | ||
Line 79: | Line 80: | ||
</ | </ | ||
- | The splicing operator can be also used for matching | + | The splicing operator can be also used in the left-hand side of an assignment or definition to separate the head of a table with its rest elements, as shown below. |
< | < | ||
>def [first, @rest] := [1,2,3,4] | >def [first, @rest] := [1,2,3,4] | ||
Line 89: | Line 90: | ||
===== Functions ===== | ===== Functions ===== | ||
- | As variables and tables, functions are defined with the keyword **def** in the form of: | + | Analogous to 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. A basic function looks like this: | + | The argument list is just a list of local variables which are always evaluated one by one from left to right. Hence, AmbientTalk employs // |
< | < | ||
>def square (x) { x*x } | >def square (x) { x*x } | ||
Line 100: | Line 101: | ||
>>25 | >>25 | ||
</ | </ | ||
- | This example also illustrates | + | This example also illustrates |
< | < | ||
- | >def f(){nil} | + | >def f() { nil } |
>>< | >>< | ||
>f() | >f() | ||
>>nil | >>nil | ||
</ | </ | ||
- | The return value of a function is the result of the last statement | + | The return value of a function is the result of the last executed |
+ | |||
+ | < | ||
+ | A function definition is a statement. The body of a function | ||
+ | < | ||
+ | def funA() { | ||
+ | | ||
+ | } | ||
+ | def funB() { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | The parser will complain saying that '' | ||
+ | </ | ||
- | Functions | + | Functions |
< | < | ||
>def counter := 0 | >def counter := 0 | ||
Line 123: | Line 137: | ||
>def fac(n) { | >def fac(n) { | ||
def inner(n, result) { | def inner(n, result) { | ||
- | if: (n =0) then: { result } else: { inner( n-1, n * result) | + | if: (n = 0) then: { result } else: { inner( n-1, n * result) |
}; | }; | ||
inner(n,1) | inner(n,1) | ||
Line 132: | Line 146: | ||
</ | </ | ||
- | This example also illustrates how a function can be made private by means of lexical | + | This example also illustrates how a function can be made "private" |
==== Variable-Length Argument Functions ==== | ==== Variable-Length Argument Functions ==== | ||
- | You can create functions that take an arbitrary number of arguments by means of the splicing operator | + | You can create functions that take an arbitrary number of arguments |
< | < | ||
- | >def sum(@args){ { | + | >def sum(@args) { |
def total := 0; | def total := 0; | ||
foreach: { |el| total := total + el } in: args; | foreach: { |el| total := total + el } in: args; | ||
- | total} | + | total |
+ | }; | ||
>>< | >>< | ||
> | > |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag