Chapter 4
Program Control
Function Calls
General Syntax
The general syntax for function calls is
function(arg1, arg2, … argn)
function has the syntax of an operand and is the function to be called. The args have the syntax of expressions, and are the arguments to the function. The function will often be a named value reference, but it can be any other kind of operand as well.
In the following example, the function being called is the value of the
binding average
.
average(x, y)
In the following two examples, the function being called is the value of
a method
statement. The examples differ only in that the second example puts
parentheses around the method
statement, to make the code somewhat more
readable.
method(x) x + 1 end (99) (method(x) x + 1 end) (99)
In the following examples, the function being called is the result of another function
call. key-test
takes a collection as an argument, and returns a predicate
function. The predicate function is then applied to the two keys. The following three
program fragments will have the same effect.
key-test(collection)(key1, key2) (key-test(collection))(key1, key2) begin let fun = key-test(collection); fun(key1, key2); end
Functions may accept keyword arguments. These are optional and order-independent. They may
also accept a variable number of rest
arguments.
A complete description of functions, parameter lists, and function calling is given
in Chapter 6, Functions.
Slot Reference
Dylan provides a shorthand syntax for functions that accept one argument. The
syntax argument.function
applies function to argument. This syntax is commonly used for slot
reference, to access the function slot of argument.
Order of execution aside, the following pairs of function calls are equivalent:
america.capital capital(america) window.position position(window)
Slot reference syntax can be cascaded and is left associative. Order of execution aside, the following pair of expressions are equivalent. Each returns the origin of the root-view of a window.
window.root-view.origin origin(root-view(window))
Element Reference
Dylan provides a shorthand syntax for element reference. The
syntax sequence[i]
is equivalent to
the function call element(sequence, i)
. The
syntax array[i1, i2, … in]
is equivalent to the function
call aref(array, i1, i2, … in)
.
Order of execution aside, the following pairs of expressions are equivalent:
*all-windows*[0] element(*all-windows*, 0) *tic-tac-toe*[1, 2] aref(*tic-tac-toe*, 1, 2)
The names element
and aref
are looked up in the environment of
the element reference expression.