Definicja i wywołanie funkcji

1. Funkcja bez argumentów

to funkcja
    instrukcje
end

2. Funkcja z argumentami obowiązkowymi

to funkcja :arg1 :arg2 ...
    instrukcje
end

3. Funkcja z argumentami obowiązkowymi i opcjonalnymi

to funkcja :arg1 :arg2 ... [:opt1 wyrażenie1] [:opt2 wyrażenie2] ... [:reszta]
    instrukcje
end

Funkcja pozwala zdefiniować zestaw instrukcji wywoływany w programie przy pomocy nazwy nadanej funkcji. Wywołanie funkcji pozwala używać zmiennych parametrów, nazywanych argumentami. Można zdefiniować argumenty:
- obowiązkowe: :arg1 :arg2 ..., które muszą zostać podane podczas wywołania funkcji;
- opcjonalne: [:opt1 wyrażenie1] [:opt2 wyrażenie2] ..., które mogą być podane podczas wywołania funkcji - w tym przypadku konieczne jest objęcie wywołania nawiasami; jeśli argument opcjonalny nie zostanie podany w wywołaniu, przyjmie on wartość domyślną - wynik wyrażenia w definicji tego argumentu (wyrażenie może używać wcześniej zdefiniowanych argumentów);
- reszta: [:reszta] - zawiera listę wartości wszystkich argumentów użytych w wywołaniu funkcji, które nie zostały użyte jako argumeny obowiązkowe i opcjonalne.
Argumenty są traktowane w czasie wykonania funkcji jako zmienne lokalne.

Funkcja może zwrócić wynik, pojedynczą wartość wyrażenia użytego jako argument instrukcji output. Działanie funkcji bez zwrócenia wyniku można przerwać przy pomocy instrukcji stop.

Zmienne lokalne utworzone wewnątrz funkcji (przy pomocy let) zostaną usunięte po wyjściu z funkcji.
Zmienne globalne utworzone wewnątrz funkcji (przy pomocy make lub operatora :=) będą widoczne także po wyjściu z funkcji.

W POOL definicja funkcji jest używana także do opisu klas.

Przykład 1:
Funkcja-procedura, bez argumentów oraz nie zwracająca wyniku.

to kwadrat
  repeat 4 [fd 80 rt 90]
end

repeat 36 [fd 20 rt 10 kwadrat]

Rezultat wykonania: grafika, bez wyjścia tekstowego.

Przykład 2:
Funkcja-procedura, z argumentem obowiązkowym i opcjonalnym, nie zwracająca wyniku.

to wielokąt :n [:l 50]
  repeat :n [fd :l rt 360 / :n]
end

repeat 10 [
  "x := repcount + 2
  wielokąt :x          ;użyj domyślnej wartości :l = 50
  (wielokąt :x (-50))  ;użyj opcjonalnej wartości :l = -50
]

Rezultat wykonania: grafika, bez wyjścia tekstowego.

Przykład 3:
Funkcje obliczające pole prostokąta i trójkąta. Jeśli argument opcjonalny nie zostanie podany, jego wartość domyślna jest obliczana tak, by otrzymać pole figury równobocznej.

to prostokąt :a [:b :a]
  op :a * :b
end

to trójkąt :a [:h (0.5 * sqrt 3) * :a]
  op 0.5 * :a * :h
end

print prostokąt 2     ;kwadrat o boku 2
print (prostokąt 2 3) ;prostokąt o bokach 2 i 3

print trójkąt 2       ;trójkąt równoboczy o boku 2
print (trójkąt 2 3)   ;trójkąt o podstawie 2 i wysokości 3

Rezultat wykonania:

4
6
1.73205080756888
3

Przykład 4:
Funkcja rekurencyjna.

to silnia :x
  if :x > 1 [op :x * silnia :x - 1]
  op 1
end

print silnia 5

Rezultat wykonania:

120

Przykład 5:
Funkcja o zmiennej liczbie argumentów.

to suma [:r]
  let "s 0
  foreach "x :r ["s += :x]
  op :s
end

print suma
print (suma 1)
print (suma 1 2)
print (suma 1 2 3)

Rezultat wykonania:

0
1
3
6

Zobacz także:

let, localmake - ustaw/utwórz zmienną lokalną
output - zwróć wynik
stop - wyjdź z funkcji

Klasy i dziedziczenie
Żółw - obiekt

Funkcja jako wartość
$, func - odczytaj funkcję

Spis treści