User Tools

Site Tools


at:tutorial:basic

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
at:tutorial:basic [2007/04/05 10:04] elisagat:tutorial:basic [2007/04/05 12:01] elisag
Line 76: Line 76:
 >>25 >>25
 </code> </code>
-This example also illustrates how functions are called. Calls to functions without parameters must also include the parenthesis.+This example also illustrates how functions are called. Calls to functions without parameters must also include the parenthesis as shown below. 
 +<code> 
 +>def f(){nil} 
 +>><closure:f> 
 +>f() 
 +>>nil 
 +</code> 
 +The return value of a function is the result of the last statement executed. Functions must always return a value - i.e. they cannot be abstract. The example also illustrates how to create dumb function that doesn't do anything but returning the //nil// object
  
 Functions have access to the enclosing environment of its definition as shown in the following example.   Functions have access to the enclosing environment of its definition as shown in the following example.  
Line 137: Line 144:
 </code> </code>
  
-===== Blocks =====+ 
 +===== Closures =====
  
 The function name can also be used just to refer the function but without calling it. TODO! 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:+===== Blocks =====
  
 +In AmbientTalk, blocks are merely syntactic sugar for anonymous closures (aka lambdas).  Blocks are creating using the {} braces in the form of:
 <code> <code>
->def sum := 0 +{ | <parlist| <body>
->>0 +</code> 
->sum := sum + 1 +If the block do not require any parameter, the |<parlist>| can be omitted.  Consider a basic block to sum two numbers
->>1 +<code> 
->sum := { | x, y| x + y +>{| a, b| a+ b} (3,2) 
->>nil +>>5 
->sum(1,2)+</code> 
 +Note that the argument list passed to the block can define the different types of arguments previously explained. 
 +<code> 
 +>{|a, b, @rest| def total := b; foreach: { |el| total := total + el} in: rest; total }(1,2,3) 
 +>>6 
 +</code> 
 +AmbientTalk doesn’t support function assigment. However, one can assign blocks to variables. In order to call the block the name of the variable must be used. If the block defined parameters, these are required to the call as argument list. What follows is an example of such manipulation: 
 +<code> 
 +>def square := { |x| x * x
 +>><closure:lambda> 
 +>square(1,2)
 >>3 >>3
 </code> </code>
at/tutorial/basic.txt · Last modified: 2020/02/09 22:05 by elisag