Erlang - Eğlenceler
Erlang'da anonim işlevleri tanımlamak için eğlenceler kullanılır. Anonim bir işlevin genel sözdizimi aşağıda verilmiştir -
Sözdizimi
F = fun (Arg1, Arg2, ... ArgN) ->
...
End
Nerede
F - Bu, anonim işleve atanan değişken adıdır.
Arg1, Arg2, ... ArgN - Bunlar anonim işleve iletilen argümanlardır.
Aşağıdaki örnek, anonim işlevin nasıl kullanılabileceğini gösterir.
Misal
-module(helloworld).
-export([start/0]).
start() ->
A = fun() -> io:fwrite("Hello") end,
A().
Yukarıdaki programla ilgili olarak aşağıdaki noktalara dikkat edilmelidir.
Anonim işlev A değişkenine atanır.
A () değişkeni aracılığıyla anonim işlev.
Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alacağız.
“Hello”
Anonim işlevin başka bir örneği aşağıdaki gibidir, ancak bu, parametrelerin kullanımıyla.
-module(helloworld).
-export([start/0]).
start() ->
A = fun(X) ->
io:fwrite("~p~n",[X])
end,
A(5).
Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alacağız.
Çıktı
5
Değişkenleri Kullanma
Anonim işlev, anonim işlevin kapsamı dışındaki değişkenlere erişme yeteneğine sahiptir. Bunun bir örneğine bakalım -
Misal
-module(helloworld).
-export([start/0]).
start() ->
B = 6,
A = fun(X) ->
io:fwrite("~p~n",[X]),
io:fwrite("~p~n",[B])
end,
A(5).
Yukarıdaki programla ilgili olarak aşağıdaki noktalara dikkat edilmelidir.
B değişkeni anonim işlevin kapsamı dışındadır.
Anonim işlev, genel kapsamda tanımlanan değişkene yine de erişebilir.
Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alacağız.
Çıktı
5
6
İşlevler içindeki İşlevler
Üst düzey işlevlerin diğer en güçlü yönlerinden biri, bir işlev içinde bir işlevi tanımlayabilmenizdir. Bunu nasıl başarabileceğimize dair bir örnek görelim.
Misal
-module(helloworld).
-export([start/0]).
start() ->
Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end,
A = Adder(6),
A(10).
Yukarıdaki programla ilgili olarak aşağıdaki noktalara dikkat edilmelidir.
Toplayıcı, eğlence (X) olarak tanımlanan daha yüksek dereceli bir işlevdir.
Toplayıcı işlevi fun (X), başka bir fun (Y) işlevi için bir referansa sahiptir.
Yukarıdaki programı çalıştırdığımızda aşağıdaki sonucu alacağız.
Çıktı
16