Funkcja jako wartość
Funkcja może być użyta jako wartość w następujących sytuacjach:
Klasa / konstruktor
Definicja funkcji w języku POOL jest także używana do opisu klasy. Żółwie (obiekty) danej klasy są tworzone przy pomocy
instrukcji newt
i newturtles
.
Funkcja podana jako argument tych instrukcji staje się konstruktorem żółwia.
Przykład 1:
to fig :n
to draw :a
let "p pos
let "h heading
rt 90 bk :a/2
repeat :nsides [fd :a lt 360 / :nsides]
setpos :p
seth :h
end
"nsides := :n
ht
end
"tri := (newt $fig 3)
"pnt := (newt $fig 5)
print :nsides @ :tri
print :nsides @ :pnt
(draw 100) @ :tri
(draw 100) @ :pnt
Rezultat wykonania:
3
5
Zobacz także:
Klasy i dziedziczenie
Równolegle działające żółwie
Deklaracja funkcji obsługi stopera
Stoper pozwala na wysyłanie sygnału lub uruchamianie kodu
w regularnych odstępach czasu. Kod ten może być uruchamiany przez funkcję obsługi sygnału stopera; kod może być także
podany jako argument instrukcji timer
jako lista instrukcji
lub jako funkcja.
Przykład 2:
to fn :t :i :dt
print :t
end
"t := (timer $fn 500 0 5)
Rezultat wykonania:
[1 27.203125]
[2 500.1953125]
[3 501.6484375]
[4 500.5078125]
[5 500.640625]
Zobacz także:
timer - utwórz stoper
Deklaracja funkcji obsługi zdarzeń elementów interfejsu
Zdarzenia wywoływane przez elementy interfejsu (wcisnięcie przycisku, zmiana stanu zaznaczenia, ...) mogą uruchomić
kod obsługi zdarzenia. Kod ten można zadeklarować przy pomocy instrukcji setonclick
,
setonchange
i analogicznych, których argumentem może być lista instrukcji lub funkcja.
Przykład 3:
to bhandler
print "Klik...
end
"b := button "Test [20 10]
setonclick :b $bhandler
Rezultat wykonania (po każdym wcisnięciu przycisku "Test"):
Klik!
Dynamiczne wywołanie funkcji
Funkcje w języku POOL mogą być wywoływane dynamicznie. W takim trybie wybór funkcji, która zostanie wywołana
odbywa sie w trakcie wykonania programu. Wywoływana funkcja jest przekazywana jako argument instrukcji
call
.
Przykład 4:
to f1 :x op sqrt :x end
to f2 :x op exp :x end
to f3 :x op log :x end
repeat 3 [print (call func word "f repcount 2)]
Rezultat wykonania:
1.4142135623731
7.38905609893065
0.693147180559945
Zobacz także:
Dynamiczne wywołanie funkcji
$, func - funkcja
Spis treści