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)  ;trójkąt: konstruktor z argumentem "3"
"pnt := (newt $fig 5)  ;pięciokąt: konstruktor z argumentem "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