Procedimentos e funções
# example of procedure
func act(k: float) {
# do something
}
# example of function
func ans: int = sum(x: int, y: int) {
ans = x + y;
}
Passagens de parâmetros
Vetores e matrizes de tamanho indefinido (tipos mat e vec) são sempre passados por referência.
Por padrão, todos os outros tipos -- incluindo tipos primitivos como int, vec3, mat3, e tipos definidos pelo usuário -- são passados por cópia. Podemos utilizar modo de passagem por referência através da palavra reservada ref.
Seguindo a metodologia de linguagens de programação modernas, os argumentos formais são constantes por padrão. Para indicar que um parâmetro formal é mutável, deve-se anotar o seu tipo com a palavra reservada mut.
func f(
x: int, # by copy, constant
y: mut int, # by copy, mutable
z: ref int, # by reference, constant
w: mut ref int, # by reference, mutable
A: vec, # by reference, constant
B: mut vec, # by reference, mutable
f: (int -> int)) { # subprogram constant reference
# do something
}