animasi blog
Animasi Blog

Senin, 30 Desember 2013

Erlang Pograming




Tentang Erlang
Tulisan ini sedikit untuk memberikan gambaran tentang Erlang. Erlang adalah bahasa pemrograman sekaligus nama peranti pengembangannya. Erlang adalah software bebas dan bisa diperoleh di website Erlang. Erlang didesain oleh Joe Armstrong dan kebanyakan digunakan di berbagai proyek telekomunikasi dari Ericsson. Nama Erlang diambil dari 2 hal yaitu Ericsson Language serta nama orang (A. K Erlang). Erlang kebanyakan digunakan pada aplikasi yang bersifat Fault-Tolerant, Real Time, dan Concurrent. Erlang juga mendukung pengembangan aplikasi untuk SMP (Symmetric MultiProcessing) sejak rilis R11B (bulan mei 2006).
Versi Software
Tulisan ini menggunakan versi R13B (rilis 21 April 2009). Erlang tersedia untuk versi Windows (binary) dan versi source code. Beberapa distribusi Linux (dan BSD?) menyertakan Erlang ke dalam masing-masing distro (diantaranya adalah Arch Linux, Fedora, CentOS, dan lain-lain). Jika memilih menggunakan paket dari distro maka bisa digunakan mekanisme instalasi (yum, pacman, apt-get, etc) dari berbagai distro tersebut. Tulisan ini akan menggunakan distribusi source code.
Untuk bisa mengkompilasi, diperlukan paket development tools (gcc toolchains, serta berbagai pustaka dan paket software lainnya). Untuk mengkompilasi Erlang menjadi paket binari diperlukan berbagai paket berikut (beberapa merupakan paket opsional, tergantung parameter pada saat kompilasi):
  • Perl 5
  • GNU m4
  • ncurses
  • OpenSSL
  • Sun Java jdk-1.5.0
  • X Window
  • sed
  • Flex
Instalasi
Ada 1 paket source code yang harus diambil dan ada 2 dokumentasi (HTML dan man) yang sifatnya opsional. Semua distribusi ini bisa diperoleh di:
Untuk keperluan ini, Erlang diasumsikan diinstall di direktori /opt/software/erlang (buat dulu direktori ini jika belum ada).
Berikut adalah langkah-langkah untuk instalasi:
  1. tar -xzvf otp_src_R13B.tar.gz
  2. cd otp_src_R13B
  3. ./configure –prefix=/opt/software/erlang –enable-smp-support –enable-hipe
  4. make
  5. make install
Hasil dari langkah tersebut adalah:
[bpdp@bpdp-arch otp_src_R13B]$ ls -la /opt/software/erlang
total 16
drwxr-xr-x 4 bpdp users 4096 2009-04-22 06:49 .
drwxr-xr-x 9 bpdp users 4096 2009-04-22 07:02 ..
drwxr-xr-x 2 bpdp users 4096 2009-04-22 06:49 bin
drwxr-xr-x 3 bpdp users 4096 2009-04-22 06:49 lib
[bpdp@bpdp-arch otp_src_R13B]$
Keterangan:
  • bin adalah direktori tempat link ke berbagai script executable
  • lib/erlang merupakan direktori utama tempat Erlang diinstall
Konfigurasi Environment Variables
Supaya instalasi Erlang dikenali setiap kali login, letakkan baris-baris berikut pada $HOME/.bashrc
E_HOME=/opt/software/erlang
PATH=$PATH:$E_HOME/bin
MANPATH=$PATH:$E_HOME/lib/erlang/nan
export PATH
export MANPATH
Instalasi Dokumentasi
Dokumentasi harus diletakkan pada lokasi instalasi dari Erlang (/opt/software/erlang/lib/erlang). Berikut ini adalah cara instalasi dokumentasi:


  
1.  cd /opt/software/erlang/lib/erlang



  
2.  tar -xzvf /path/to/otp_doc_man_R13B.tar.gz




Let’s Try Erlang!
Untuk mencoba Erlang, berikut akan digunakan salah satu contoh untuk mencari fakturial yang diambil dari manual Erlang. Source code disimpan dalam file tut1.erl berikut ini:
-module(tut1).
-export([fac/1]).

fac(1) ->
1;
fac(N) ->
N * fac(N - 1).
File source code dari Erlang akan dikompilasi menjadi file .beam yang akan dijalankan oleh Erlang VM. Berikut adalah langkah untuk mengkompilasi dan menggunakan modul yang telah terkompilasi tersebut (ini hanya sebagai gambaran awal saja):
[bpdp@bpdp-arch erlang]$ erl
Erlang R13B (erts-5.7.1) [/source]

 [rq:1] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.7.1  (abort with ^G)
1> c(tut1).
{ok,tut1}
2> tut1:fac(4).
24
3>
User switch command
--> q
[bpdp@bpdp-arch erlang]$
Untuk keluar dari Eshell, tekan [Ctrl]-G kemudian tekan q.

Pemrograman Fungsional



Secara umum, bahasa pemrograman dapat dikelompokkan berdasarkan struktur pemrogramannya, terutama dalam mengimplementasikan suatu ekspresi. Jika setiap ekspresi selalu dinyatakan dalam bentuk fungsi, maka bahasa pemrograman ini disebut sebagai functional programming. Prinsip utama dari functional programming (FP) adalah bahwa nilai suatu ekspresi hanya tergantung kepada nilai sub-ekspresinya. Nilai ekspresi seperti a + b hanya tergantung kepada nilai a dan nilai b. Prinsip ini menghilangkan efek samping dalam ekspresi sehingga FP dapat disebut sebagai pemrograman tanpa assignment.
Bahasa fungsional pada umumnya, dan LISP pada khususnya, memainkan peranan penting dalam definisi bahasa. Sebuah definisi bahasa harus ditulis ke dalam notasinotasi, disebut meta-bahasa(meta-language) atau bahasa yang didefinisikan (defining language), dan bahasa yang didefinisikan cenderung menjadi fungsional. Dalam kenyataannya, implementasi LISP pertama dimulai, ketika LISP digunakan untuk mendefinisikan dirinya sendiri.
Konsep dasar FP berasal dari LISP. LISP dirancang oleh John McCarthy tahun 1958, mungkin LISP adalah bahasa tertua kedua, setelah fortran. Diyakini LISP sebagai penyedia pertama rekursi, kelas-utama fungsi, garbage collection, dan sebuah definisi 2 bahasa formal (dalam LISP itu sendiri). Implementasi LISP juga mendorong ke arah lingkungan pemrograman terintegrasi, yang menggabungkan editor, interpreter dan debugger.
LISP menggunakan notasi prefiks dengan tanda kurung. Jadi, aritmetika seperti 5 * 7 ditulis sebagai (* 5 7)
Contoh program sederhana dalam pemrograman List :
Misalkan kita ingin membuat fungsi untuk menentukan bilangan terbesar dari 2 buah bilangan. Maka program LIST nya adalah sebagai berikut :
(define (maks a b)
(if (> a b) a b
)
)
Berikut cara menjalankannya :
> (maks 5 6)
6
Contoh lain dengan menggunakan Scheme :
1. Menghitung jumlah suatu elemen dalam list
(define (hitung p q)
(if (null? q) 0
(if (equal? (modulo (car q) p) 0)
(+ 1 (hitung p (cdr q)))
(hitung p (cdr q))
)
)
)
Hasil compile :
Description: scheme 1
2. Membentuk sebuah list dengan elemen dari 1 sampan i
(define (bentuk a)
(if (equal? a 0) null
(append (bentuk (- a 1)) (list a))
)
)
Hasil compile :
Description: scheme2
3. Memasukkan sebuah elemen ke dalam list
(define (insert p q r)
(if (equal? p 0)
(cons q r)
(cons (car r) (insert (- p 1) q (cdr r)))
)
)
hasil compile :
Description: scheme 3
4. Mengambil semua elemen kecuali elemen terakhir
(define (ambil a)
(if (null? (cdr a)) null
(cons (car a) (ambil (cdr a)))
)
)
Hasil compile :
Description: scheme 4
5. Menampilkan isi dari tiap elemen kecuali elemen pertama dan terakhir
(define (tengah a)
(if (null? (cddr a)) null
(cons (cadr a) (tengah (cdr a)))
)
)
Hasil compile :
Description: scheme 5
6. Menghapus elemen yang memiliki nilai sama dengan sebelum/setelahnya dari sebuah list
(define (hapus a)
(if (null? a) null
(if (null? (cdr a)) a
(if (equal? (car a) (cadr a))
(hapus (cdr a))
(cons (car a) (hapus (cdr a)))
)
)
)
)
Hasil compile :
Description: scheme 6
7. Menghitung jumlah elemen yang habis dibagi oleh suatu bilangan tertentu
(define (hitung a b)
(if (null? b) 0
(if (equal? (modulo (car b) a) 0)
(+ 1 (hitung a (cdr b)))
(hitung a (cdr b))
)
)
)
Hasil compile :
Description: scheme7
8. Menyisipkan sebuah elemen dengan posisi tertentu dalam sebuah list
(define (sisip a b c)
(if (equal? c 1)
(cons b a)
(cons (car a) (sisip (cdr a) b (- c 1)))
)
)
hasil compile :
Description: scheme8
9. Mencari nilai Faktor Persekutuan Terbesar (FPB)
(define (fpb b a)
(if (equal? a 0) b
(fpb a (modulo b a))
)
)
Hasil compile :
Description: scheme 9
10. Menentukan digit paling depan dari suatu bilangan bulat
(define (depan a)
(if (number? a)
(if (< a 10) a
(depan (floor (/ a 10)))
)
0)
)
hasil compile :
Description: scheme10