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 17:30] – tvcutsem | at:tutorial:basic [2011/05/23 13:43] – tvcutsem | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | < | ||
- | **This Tutorial is still under heavy construction!!** | ||
- | </ | ||
====== Functional and Imperative Programming ====== | ====== Functional and Imperative Programming ====== | ||
Line 34: | Line 31: | ||
</ | </ | ||
- | < | + | < |
When using the '': | When using the '': | ||
</ | </ | ||
Line 176: | Line 173: | ||
</ | </ | ||
- | 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 204: | Line 216: | ||
>def [get, set] := makeCell(42); | >def [get, set] := makeCell(42); | ||
>> | >> | ||
+ | >get(); | ||
+ | >>42 | ||
</ | </ | ||
Line 225: | Line 239: | ||
def total := a + b; | def total := a + b; | ||
| | ||
- | }; sum(1,2,3) | + | }; |
+ | >>< | ||
+ | >sum(1,2,3) | ||
>>6 | >>6 | ||
</ | </ | ||
Line 234: | Line 250: | ||
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 243: | Line 261: | ||
def i := 0; | def i := 0; | ||
def mapped[tbl.length] { | def mapped[tbl.length] { | ||
- | | + | i := i+1; |
+ | clo( tbl[ i ] ) | ||
}; | }; | ||
} | } | ||
Line 264: | Line 283: | ||
</ | </ | ||
- | 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 339: | Line 366: | ||
>> | >> | ||
</ | </ | ||
+ | |||
==== Tables ==== | ==== Tables ==== | ||
- | We have already | + | We have already |
< | < | ||
> | > | ||
Line 399: | Line 427: | ||
>>1 | >>1 | ||
> def [i, j] := [1,3] | > def [i, j] := [1,3] | ||
- | >>>[1, 3] | + | >>[1, 3] |
>{i < j}.whileTrue: | >{i < j}.whileTrue: | ||
1 | 1 | ||
Line 408: | Line 436: | ||
Compound boolean expressions can be created by means of a boolean' | Compound boolean expressions can be created by means of a boolean' | ||
- | ===== Control Flow Structures | + | ===== Control Flow Constructs |
- | Control flow structures | + | Control flow constructs |
< | < | ||
- | if: booleanCondition then: { consequent } | + | if: booleanCondition then: consequentClosure |
- | if: booleanCondition then: { consequent } else: { alternative } | + | if: booleanCondition then: consequentClosure |
- | while: | + | while: |
- | foreach: | + | foreach: |
- | do: { body } if: condition | + | do: bodyClosure |
- | do: { body } unless: condition | + | do: bodyClosure |
</ | </ | ||
- | An example of usage for some of these structures is shown below in the definition of the sort function. | + | |
+ | <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 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 }) { | ||
- | def quickSort(table, | + | |
- | def left := low; | + | def left := low; |
- | def right := high; | + | def right := high; |
- | def pivot := table[(left+right) /- 2]; | + | def pivot := table[(left+right) /- 2]; |
- | def save := nil; | + | def save := nil; |
- | while: { left <= right } do: { | + | while: { left <= right } do: { |
- | | + | while: { cmp(table[left], |
- | left := left + 1 | + | left := left + 1 |
- | }; | + | }; |
- | | + | while: { cmp(pivot, table[right]) } do: { |
- | right := right - 1 | + | right := right - 1 |
- | }; | + | }; |
- | | + | if: (left <= right) then: { |
- | | + | // swap elements |
- | | + | save := table[left]; |
- | table[left] := table[right]; | + | table[left] := table[right]; |
- | table[right] := save; | + | table[right] := save; |
- | left := left + 1; | + | left := left + 1; |
- | right := right - 1; | + | right := right - 1; |
- | | + | }; |
- | }; | + | }; |
- | if: (low< | + | if: (low< |
- | if: (high> | + | if: (high> |
- | | + | table; |
- | | + | }; |
- | | + | quickSort(table, |
- | }; | + | }; |
>>< | >>< | ||
> | > | ||
>>[2, 4, 5, 6, 8, 37] | >>[2, 4, 5, 6, 8, 37] | ||
</ | </ | ||
+ | |||
+ | AmbientTalk has no '' |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag