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
(wielokąt :x (-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
print (prostokąt 2 3)
print trójkąt 2
print (trójkąt 2 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