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/07/05 11:19] – elisag | at:tutorial:basic [2008/03/12 17:18] – * tvcutsem | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | < | + | |
- | **This Tutorial is still under heavy construction!!** | + | |
- | </ | + | |
====== Functional and Imperative Programming ====== | ====== Functional and Imperative Programming ====== | ||
Line 227: | Line 225: | ||
def total := a + b; | def total := a + b; | ||
| | ||
- | }; sum(1,2,3) | + | }; |
+ | >>< | ||
+ | >sum(1,2,3) | ||
>>6 | >>6 | ||
</ | </ | ||
Line 341: | Line 341: | ||
>> | >> | ||
</ | </ | ||
+ | |||
==== Tables ==== | ==== Tables ==== | ||
- | We have already | + | We have already |
< | < | ||
> | > | ||
Line 401: | Line 402: | ||
>>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 414: | Line 415: | ||
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 '' | ||
+ | </ | ||
- | An example of usage for some of these structures is shown below in the definition of the sort function. | + | 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, |
- | }; | + | }; |
>>< | >>< | ||
> | > |
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag