User Tools

Site Tools


Sidebar

Jump to
AmbientTalk
CRIME
iScheme

at:tutorial:basic

This is an old revision of the document!


UNDER CONSTRUCTION!!

Functional and Imperative Programming

This part of the tutorial shows AmbientTalk as a simple expression language with a minimum syntax which resembles very on Java script. This section mainly describes the basic features of the language, namely variables, functions and tables and control flow.

Variables

As usual, one can define, assign and refer to a variable. Variable definitions are made with the keyword def. Note that AmbientTalk is a dynamically typed language so, variables do not have a type but, they just contain values.

In the examples we use the interactive AmbientTalk shell (iat) where the input and output prompt are represented by > and » , respectively.

>def x := 5
>>5
>def y := x + 2
>>7

Variable definitions can be combined with assignments as shown above. As in Pico, assignments uses the “:=” operator. Note that there must be an space between the variable and the “:=” operator in order for the parse to resolve the ambiguity between a keyword message and a assignment, e.g. “a := 1” is understood as an assignment while “a:” as a keyword. We will further elaborate on keywords in the following sections.

An assignment consists of one or more expressions, providing that the number of expressions on the right hand side match the number of variables on the left hand side. This allows a permutation of variables such as:

>[x, y] := [ y, x ]
>>[7,5]

Reference is just done by evaluating the variable.

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:

def t[ <size> ] { <expression> }

This means that the <expression> will be evaluated <size> times, i.e., one for each slot of the table. This allows expressions such as initializing a table of ascending numbers as shown below:

>def z := 0
>>0
>def table[5] { z := z + 1 }
>>[1, 2, 3, 4, 5]

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 table whose entries are other tables.

>def vocals := ["a", "e", "i", "o", "u"]
>>["a", "e", "i", "o", "u"]
>table[3] := vocals
>>[1, 2, ["a", "e", "i", "o", "u"], 4, 5]
>table[3][2]
>>"e"

As shown in the definition of the varible “vocals”, evaluating a series of comma-separated abstract grammar values between square brackets (aka a tabulation) results in a table.

>[ 1, table, "ambientTalk"]
>>[1, [1, 2, ["a", "e", "i", "o", "u"], 4, 5], "ambientTalk"]

Functions

As variables and tables, functions are defined with the keyword def in the form of:

def functionname( <arglist> ) { <body> }

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 }
>>nil
>square(5)
>>25

Functions can call themselves recusively and as in Pico, functions can also be nested in the definitions other functions such as:

>def fac(n) { 
  def inner(n, result) { 
    if: (n =0) then: { result } else: { inner( n-1, n * result)  }
  }; 
  inner(n,1)
}
>>nil
>fac(5)
>>120

Variables and other functions defined locally to a function are only visible in the scope of the function where there were defined.

The function name can also be used just to refer the function but without calling it. TODO!

Unlike Pico, AmbientTalk doesn't support function assigment. However, one can assign functions to variables. This means that internally a closure will be created and assigned to the variable. What follows is an example of such manipulation:

>def sum := 0
>>0
>sum := sum + 1
>>1
>sum := { | x, y| x + y }
>>nil
>sum(1,2)
>>3

Blocks

at/tutorial/basic.1175680293.txt.gz · Last modified: 2007/04/05 09:57 (external edit)