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/12/28 12:29] – fixed tvcutsem | at:tutorial:basic [2011/05/23 13:38] – added tvcutsem | ||
---|---|---|---|
Line 174: | Line 174: | ||
</ | </ | ||
- | In that case, the //sum// function still accepts an arbitrary number of arguments as long as two arguments are supplied. //a// and //b// are considered as mandatory arguments of the argument list. | + | In that case, the //sum// function still accepts an arbitrary number of arguments as long as two arguments are supplied. //a// and //b// are considered as mandatory arguments of the argument list. |
+ | |||
+ | The splice operator can also be used to transform a table into an argument list for a function, for example: | ||
+ | < | ||
+ | def args := [3,4,5]; | ||
+ | > sum(1,2, @args); | ||
+ | >> 15 | ||
+ | </ | ||
+ | |||
+ | One way to think about this is that the splice operator splices the '' | ||
+ | < | ||
+ | > sum(1, | ||
+ | >> 21 | ||
+ | </ | ||
+ | |||
+ | ==== Optional Parameters ==== | ||
A function can also declare optional arguments as shown below. Optional arguments can be omitted in a function call. If this is the case, the default expression provided in their definition is evaluated and passed as argument to the function instead. | A function can also declare optional arguments as shown below. Optional arguments can be omitted in a function call. If this is the case, the default expression provided in their definition is evaluated and passed as argument to the function instead. | ||
Line 236: | Line 251: | ||
AmbientTalk borrows its block syntax from languages like Smalltalk and Self, where the role of the curly braces is played by square brackets, i.e. '' | AmbientTalk borrows its block syntax from languages like Smalltalk and Self, where the role of the curly braces is played by square brackets, i.e. '' | ||
</ | </ | ||
+ | |||
+ | |||
===== Keywords ===== | ===== Keywords ===== | ||
Line 245: | Line 262: | ||
def i := 0; | def i := 0; | ||
def mapped[tbl.length] { | def mapped[tbl.length] { | ||
- | | + | i := i+1; |
+ | clo( tbl[ i ] ) | ||
}; | }; | ||
} | } | ||
Line 266: | Line 284: | ||
</ | </ | ||
- | However, it is impossible | + | It is also possible |
+ | |||
+ | < | ||
+ | foo: | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | Be careful when nesting calls to keyworded functions: | ||
+ | </ | ||
===== Native Data Types ===== | ===== Native Data Types ===== | ||
Line 415: | Line 441: | ||
Control flow constructs are defined in the lexical root of AmbientTalk. The lexical root is an object containing globally visible native methods (i.e. it is the top-level environment). We have already seen in the previous sections examples of use of the foreach and if/then structures. A list of traditional control flow structures defined in AmbientTalk is shown below: | Control flow constructs are defined in the lexical root of AmbientTalk. The lexical root is an object containing globally visible native methods (i.e. it is the top-level environment). We have already seen in the previous sections examples of use of the foreach and if/then structures. A list of traditional control flow structures defined in AmbientTalk is shown below: | ||
< | < | ||
- | if: booleanCondition then: consequent | + | if: booleanCondition then: consequentClosure |
- | if: booleanCondition then: consequent | + | if: booleanCondition then: consequentClosure |
- | while: | + | while: |
- | foreach: | + | foreach: |
- | do: body if: condition | + | do: bodyClosure |
- | do: body unless: condition | + | do: bodyClosure |
</ | </ | ||
- | Note that '' | + | <note warn> |
+ | Note that '' | ||
+ | </ | ||
+ | |||
+ | The above definitions in the lexical root of AmbientTalk are simply convenience functions for the methods defined on booleans and closures. For example, an if-statement can also be encoded as a message send, as in Smalltalk: '' | ||
- | An example of usage for some of these structures is shown below in the definition of the sort function. | + | An example of usage for some of the above structures is shown below in the definition of the sort function. |
< | < | ||
>def sort(table, cmp := { |e1,e2| e1 < e2 }) { | >def sort(table, cmp := { |e1,e2| e1 < e2 }) { | ||
Line 453: | Line 483: | ||
table; | table; | ||
}; | }; | ||
- | quickSort(table, | + | quickSort(table, |
}; | }; | ||
>>< | >>< |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag