# Procedures for functional programming

## Overview

Teaching: 15 min
Exercises: 0 min
Questions
• How do I write functions?

Objectives
• Be able to write our own procedures.

Similar to other programming languages, Chapel lets you define your own functions. These are called ‘procedures’ in Chapel and have an easy-to-understand syntax:

``````proc addOne(n) { // n is an.bash parameter
return n + 1;
}
``````

Procedures can be recursive:

``````proc fibonacci(n: int): int {
if n <= 1 then return n;
return fibonacci(n-1) + fibonacci(n-2);
}
writeln(fibonacci(10));
``````

They can take a variable number of parameters:

``````proc maxOf(x ...?k) { // take a tuple of one type with k elements
var maximum = x;
for i in 2..k do maximum = if maximum < x[i] then x[i] else maximum;
return maximum;
}
writeln(maxOf(1, -5, 123, 85, -17, 3));
``````

Procedures can have default parameter values:

``````proc returnTuple(x: int, y: real = 3.1415926): (int,real) { //
return (x,y);
}
writeln(returnTuple(1));
writeln(returnTuple(x=2));
writeln(returnTuple(x=-10, y=10));
writeln(returnTuple(y=-1, x=3)); // the parameters can be named out of order
``````

Chapel procedures have many other useful features, however, they are not essential for learning task and data parallelism, so we refer the interested readers to the official Chapel documentation.

## Key Points

• Functions in Chapel are called procedures.

• Procedures can be recursive.

• Procedures can take a variable number of parameters.

• Procedures can have default parameter values.