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