Memahami Cara Kerja Fungsi Faktorial pada Erlang

Mari kita coba untuk memahami kode fungsi faktorial di modul example berikut:

-module(example).  % harus sama dengan nama file example.erl
-export([fact/1]). % function ini bisa diakses dari luar modul,
                   % mirip public di OOP. function ini hanya
                   % memiliki 1 argumen

fact(1) -> 1;
fact(N) -> N * fact(N-1).

Sekarang buka shell Erlang dari direktori dimana file example.erl berada. Kita compile dengan perintah c(example).  jangan lupa tanda titiknya dan tekan enter. Lalu jalankan program dengan mengetikkan perintah: example:fact(3). di shell tersebut. Berikut adalah screenshot-nya:

fact

Nah, diagram berikut adalah salah satu cara memahami bagaimana program di atas bekerja:

fact(3) -> 3 * fact(2)
               fact(2) -> 2 * fact(1)
                              fact(1) -> 1 
                                         - lihat kode program
                                           di atas yang bilang
                                           bahwa fact(1) -> 1.  
               fact(2) -> 2 * 1
               fact(2) -> 2
fact(3) -> 3 * 2
fact(3) -> 6

Sekarang berapa fact(4)?

fact(4) -> 4 * fact(3). Karena kita sudah mengetahui bahwa fact(3) -> 6, maka:

fact(4) -> 4 * 6
fact(4) -> 24.   

List: Kepala dan Ekor

Erlang sangat intensif dalam menggunakan list atau array atau daftar Erlang membagi sebuah list menjadi dua bagian, yaitu head (kepala) dan tail (ekor). Head dan tail ini banyak digunakan untuk operasi manipulasi tiap elemen dari sebuah list. Perhatikan screenshot berikut: 

head_tail

1> L = [1,2,3,4,5].

L adalah variabel yang menampung list yang beranggotakan 1,2,3,4,5. Variabel Erlang harus diawali dengan huruf besar. Kalo variabel L menurut anda kurang komunikatif, anda bisa merubahnya menjadi List. 

2> [H|T] = L.

Mari kita lihat kepala dan ekor dari L. Anda boleh mengubah [H|T] menjadi [Head|Tail] atau [Kepala|Ekor].

3> H.

Ternyata, kepala L adalah 1.

4> T.

Ternyata, ekor T adalah 2,3,4,5. Hasil dari T yang berformat [2,3,4,5] menunjukkan bahwa T adalah list. Namun nilai L tetap [1,2,3,4,5].

Menarik bukan. Monggo, silahkan direnungkan dulu…

What is Erlang?

Ini cuma terjemahan dari http://www.erlang.org/faq/introduction.html#1. Males ah buat uraian sendiri, apalagi menerjemahkan aja sudah susah minta ampun.

1.1 Apakah Erlang?

Erlang adalah bahasa pemrograman umum dan runtime environment. Erlang telah mendukung concurrency, distribution dan fault tolerance secara  built-in. Erlang digunakan oleh Ericsson untuk membangun beberapa sistem telekomunikasi besar. Erlang tersedia sebagai open source di http://www.erlang.org.

1.2 Apakah OTP?

OTP (Open Telecom Platform) adalah koleksi libraries yang lengkap untuk Erlang dan digunakan untuk membangun berbagai hal mulai dari compiling ASN.1 sampai untuk mendukung WWW server. Hampir semua proyek yang menggunakan ”Erlang” sebenarnya menggunakan ”Erlang/OTP”, baik bahasa pemrogramannya maupun libraries-nya. OTP juga open source.

1.3 Jenis aplikasi-aplikasi apa saja yang cocok dibuat dengan Erlang?

Sistem yang bersifat distributed, reliable, soft real-time concurrent.

  • Sistem telekomunikasi, misalnya pengendalian switch atau konversi protocols.
  • Server untuk aplikasi Internet, misalnya mail transfer agent, server IMAP-4, server HTTP atau WAP Stack.
  • Aplikasi telekomunikasi, misalnya menangani mobilitas pada mobile network atau menyokong unified messaging.
  • Aplikasi database yang memerlukan kemampuan soft realtime.

Erlang cocok sebagai solusi untuk masalah di atas karena ia didesain untuk itu. Hal-hal di atas dapat dinyatakan kembali dalam istilah-istilah fitur sebagai berikut:

  • Erlang memiliki model error containment dan fault tolerance (supervised processes) yang sederhana namun canggih.
  • Concurrency dan message passing merupakan dasar dari Erlang. Aplikasi yang ditulis dengan Erlang merupakan komposisi dari proses-proses ringan (lightweight processes) yang jumlahnya bisa mencapai ratusan bahkan ribuan. Perpindahan konteks (context switching) di antara proses-proses Erlang biasanya hanya membutuhkan satu atau dua tingkatan instruksi yang jauh lebih ringan bila dibandingkan dengan perpindahan antar threads pada bahasa C.
  • Membuat bagian-bagian aplikasi yang akan dijalankan di mesin-mesin yang berbeda (distributed applications) relatif mudah. Mekanisme distribusi Erlang bersifat transparan: program-program Erlang tidak perlu sadar bahwa mereka telah terdistribusi.
  • OTP libraries disediakan untuk membantu menangani berbagai masalah umum yang terjadi pada sistem jaringan dan telekomunikasi.
  • Erlang runtime environment (sebuah mesin virtual, seperti Java virtual machine) dibuat agar kode yang di-compile pada satu arsitektur dapat dijalankan di manapun. Sistem runtime memperbolehkan kita merubah kode pada sistem yang sedang berjalan tanpa mengganggu atau mematikan program.

Erlang white paper membahas Erlang lebih mendalam dari sudut teknis.

1.4 Pada hal apa Erlang kurang cocok untuk digunakan?

Para programmer menggunakan Erlang untuk hal-hal yang cukup mengejutkan, misalnya berkomunikasi dengan X11 pada level protokol, tetapi, terdapat situasi dimana Erlang bukan menjadi pilihan yang tepat.

Erlang “kurang cocok” dipakai untuk proyek yang berkarakteristik di mana performa menjadi bidikan utama dan terdapat faktor-konstan yang berdampak besar pada performa. Contohnya adalah pengolahan citra, pengolahan signal, penyortiran data bervolume besar dan low-level protocol termination.

Erlang belum memadai bila dihadapkan dengan masalah interfacing ke program C yang telah ada. Contohnya adalah implementasi device drivers untuk sistem operasi.

Hampir (semua?) sistem besar yang dibangun dengan Erlang menggunakan C untuk kode level rendah, selebihnya Erlang mendapatkan bagian yang cukup rumit bila dilakukan oleh bahasa lain, seperti pengendalian sistem yang tersebar pada beberapa mesin dan implementasi logika protokol yang komplek.

1.5 Siapa yang menggunakan Erlang untuk pengembangan produk?

Pengguna Erlang terbesar adalah Ericsson. Ericsson menggunakannya untuk membuat software yang digunakan di dalam sistem telekomunikasi. Telah banyak proyek yang menggunakannya, salah satu yang terkenal dan memiliki skalabilitas yang ekstrim adalah AXD301 ATM switch. AXD301 dalam pengembangannya telah melibatkan ratusan orang dan volume kodenya mencapai 850 kloc Erlang (dan 1 Mloc C/C++).

Beberapa perusahaan lain yang menggunakan Erlang adalah

Bila anda ingin terdaftar di sini, kirim email ke: matthias@corelatus.com

1.6 Siapa yang menggunakan Erlang untuk riset dan pendidikan?

Beberapa universitas menggunakan Erlang dalam tingkatan tertentu. Sedikit di antaranya adalah:

Bila anda ingin terdaftar di sini, kirim email ke: matthias@corelatus.com

1.7 Apakah ada dukungan komersial untuk Erlang?

Ada beberapa perusahaan konsultan komersial dan kursus Erlang antara lain: Erlang-consulting.com , Sjoland and Thyselius dan Process One.

Pengguna yang bekerja di Ericsson dapat memperoleh support, printed manuals dan binaries dari www.erlang.se.

I Don’t Care with Your Type

Sebagai orang yang ngaku hobinya programming, nggak afdol rasanya kalau buta dengan bahasa pemrograman C. Waktu masih kuliah, saya sudah mencoba untuk belajar bahasa C, namun karena tidak diajarkan di jurusan saya (akuntansi, halaaah… ya iyalah!) maka belajarnya jadi terbengkalai. Nah mumpung lagi nggak banyak kerjaan aku belajar lagi deh bahasa C. Motivasi kembali belajar C ini juga gara-gara anggapanku bahwa aku bakal kewalahan bila harus bersaing dengan programmer-programmer muda yang berkubang dengan bahasa-bahasa populer seperti Delphi, C#, VB dan Java. Malah aku juga mencoba lagi untuk belajar bahasa C dan Erlang agar aku tetap unik di pasar tenaga kerja. Duileeee… mimpi khan boleh-boleh aja. Aneh juga, rasanya kok aku lebih rileks saat belajar C daripada belajar Java atau C#.

Setelah beberapa tahun menggunakan Delphi, baru nyadar lagi dengan fitur bahasa C yang dapat mencampur (mix) data types yang berbeda di dalam satu statement dan meng-convert-nya secara otomatis. Kalau di Delphi, wah compilernya akan termehek-mehek. Fitur ini tampaknya menjanjikan kemudahaan, namun bisa sangat berbahaya kalau saya terlalu sok pintar dalam menggunakannya. Filosofi bahasa C yang tidak begitu membatasi, membutuhkan tanggung jawab yang lebih, more freedom need more responsibility.

Lihat contoh berikut di bawah ini. Konversi beda tipe data dilakukan secara otomatis tapi resiko tidak ditanggung.

#include <stdio.h>

int main(int argc, char *argv[])
{
  char  ch;
  int    i;
  float fl;

  fl = i = ch = 'C';
  printf("ch = %c = %d, i = %d, fl = %2.2f\n", ch, ch, ch, i , fl);

  ch = ch + 1;
  printf("ch = ch + 1 -> ch = %c (%d)\n", ch, ch);

  i = fl + 2 * ch;
  printf("i = fl + 2 * ch -> %d = %2.2f + 2 * %c (%d)\n", i, fl, ch, ch);

  fl = 2.0 * ch + i;
  printf("fl = 2.0 * ch + i -> %2.2f = 2.0 * %c (%d) + %d\n", fl, ch, ch, i);

  printf("ch = %c, i = %d, fl = %2.2f\n", ch, i, fl);

  ch = 5212205.17;
  printf("Now ch = %c\n", ch);

  system("PAUSE");
  return 0;
}

Hasilnya:

ch = C = 67, i = 67, fl = 0.00
ch = ch + 1 -> ch = D (68 )
i = fl + 2 * ch -> 203 = 67.00 + 2 * D (68 )
fl = 2.0 * ch + i -> 339.00 = 2.0 * D (68 ) + 203
ch = D, i = 203, fl = 339.00
Now ch = ⌂
Press any key to continue . . .

Maksud dari D(68 ) adalah nilai ASCII dari D sama dengan 68, jadi D + 1 = 69.