Sabtu, 07 April 2012

Berbagi Ilmu Tentang LISP

Lisp adalah bahasa ekspresi, karena baik program maupun data dinyatakan sebagai ekspresi. Selain itu Lisp juga lebih mengarah dalam pemanfaatan artificial intelligence.Lisp telah tersebar luas dan merupakan salah satu bahasa pilihan untuk aplikasi seperti
artificial intelligence, 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 (defininglanguage), dan bahasa yang didefinisikan cenderung menjadi fungsional. Dalam kenyataannya, implementasi LISP pertama dimulai, ketika LISP digunakan untuk mendefinisikan dirinya sendiri.
  • Operator

Dalam paradigma fungsional/LISP, operator yang berlaku masih sama dengan paradigma procedural. Berikut adalah jenis operator yang berlaku;
a. aritmatika (+,-,/,*)
b. logika (and.or,not,xor)
c. boolean
d. untai
e. himpunan
f. relasi

  • Tipe data

a. Tipe Polimorfis
Tipe yang dalam beberapa cara terukur di atas semua tipe. Ekspresi tipe polimorfis menguraikan keluarga dari tipe-tipe. Sebagai contoh, ( )[a] adalah keluarga dari tipe di mana untuk setiap tipe a berisi tipe list dari a. List dari integer (seperti [1,2,3]), list dari karakter ([‘a’,’b’,’c’]), sekalipun list dari list integer, dll, adalah anggota dari keluarga ini. (Sebagai catatan [2,’b’] bukan contohyang valid karena tidak ada tipe tunggal yang berisi 2 dan ‘b’).
b. Tipe User-Defined
Kita dapat menentukan tipe data sendiri dalam Haskell menggunakan deklarasi data. Tipe penting yang sudah dikenal oleh Haskell adalah nilai kebenaran:
data Bool = False | True
Tipe yang didefinisikan di sini adalah Bool yang mempunyai dua nilai, yaitu True dan False. Tipe Bool adalah sebuah contoh dari tipe konstruktor, dan True dan False adalah data konstruktor (atau konstruktor saja). Dengan cara yang sama kita dapat mendefinisikan tipe warna:
data Color = Red | Green | Blue | Indigo | Violet
Bool dan Color dalam contoh di atas merupakan tipe enumerasi. Berikut contoh dari tipe dengan hanya satu data konstruktor:
data Point a = Pt a a
Karena merupakan konstruktor tunggal, tipe seperti Point sering disebut tipe tuple, karena merupakan produk kartesian (dalam hal ini biner) dari tipe lain. Berlawanan dengan itu, tipe multi-konstruktor seperti Booldan Color disebut union dari tipe sum.


  • Tipe Rekursif

Tipe dapat juga rekursif, seperti tipe dalam pohon biner:
data Tree a = Leaf a | Branch (Tree a) (Tree a)
Di sini didefinisikan tipe polimorfis pohon biner yang mana elemen-elemennya adalah node Leaf berisi nilai dari tipe a, atau node internal (“branch”) berisi dua sub-tree (rekursif). Saat membaca deklarasi data seperti ini, ingat bahwa Tree adalah tipe konstruktor, di mana Branch dan Leaf adalah data konstruktor. Di samping menciptakan koneksi antara konstruktor-konstruktor ini, deklarasi di atas mendefinisikan tipe berikut untuk Branch dan Leaf:
Branch :: Tree a -> Tree a -> Tree a
Leaf :: a -> Tree a
Dengan contoh di atas telah didefinisikan suatu tipe yang cukup kaya untuk mendefinisikan beberapa fungsi (rekursif) yang menggunakannya. Sebagai contoh akan didefinisikan sebuah fungsi fringe yang mengembalikan sebuah list dari semua elemen dalam daun dari sebuah pohon dari kiri ke kanan.


  • Tipe Sinonim

Untuk kenyamanan, Haskell menyediakan cara untuk mendefinisikan tipe sinonim, yaitu nama untuk tipe yang sering dipakai. Tipe sinonim dibuat menggunakan deklarasi type. Berikut beberapa contoh:
type String = [Char]
type Person = (Name,Address)
type Name = String
data Address = None | Addr String
Tipe sinonim tidak mendefinisikan tipe baru, tetapi memberi nama baru kepada tipe-tipe yang sudah ada. Sebagai contoh tipe Person -> Name setara dengan (String,Address) -> String. Nama yang baru seringkali lebih pendek dari tipe sinonimnya, tetapi itu bukan satu-satunya tujuan dari tipe sinonim: tipe sinonim meningkatkan kemudahan membaca sebuah program dengan menjadi lebih mnemonik. Bahkan tipe polimorfis sekalipun dapat diberi nama baru:
type AssocList a b = [(a,b)]
Ini merupakan “tipe asosiasi” yang mengasosiasikan nilai dari tipe a dengan nilai dari tipe b.


  • Notasi

a) Program adalah model solusi persoalan informatik, berisi kumpulan informasi penting yang mewakili persoalan.
b) Dalam konteks fungsional, program digambarkan dalam : himpunan nilai type,
dengan nilainya adalah konstanta.
c) Fungsi di sini merupakan asosiasi antara 2 type yaitu domain dan range.
d) Domain range dapat berupa : type dasar dan type terkomposisi (bentukan).
e) Penulisan suatu program fungsional, dipakai bahasa ekspresi ada tiga macam bentuk komposisi ekspresi adalah ekspresi fungsional dasar, konditional dan rekursif.
f) Pemrograman fungsional didasari atas analisa top down. Analisa top down dalam
pemrograman fungsional: Problema, Spesifikasi dan Dekomposisi .
g) Fungsi pada analisa topdown adalah strukturisasi teks. Sebuah fungsi mewakili
sebuah tingkatan abstraksi.


  • Konstruksi Program Fungsional

a) Definisi Fungsi : Menentukan nama dan mendefinisikan domain dan range dari fungsi.
b) Spesifikasi fungsi : menentukan “arti” dari fungsi. Contoh : Fungsi bernama Pangkat3(x) artinya     menghitung pangkat tiga x seperti pada umumnya.
c) Realisasi fungsi : mengasosiasikan pada nama fungsi, sebuah ekspresi fungsional dengan parameter formal yang cocok. Contoh : mengasosiasikan pada Pangkat Tiga: a*a*a atau a3 dengan a adalah nama parameter formal. Parameter formal fungsi adalah nama yang dipilih untuk
mengasosiasikan domain dan range.
d) Aplikasi fungsi : memakai fungsi dalam ekspresi, yaitu dengan menggantikan semua nama parameter formal dengan nilai. Dengan aplikasi fungsi, akan dievaluasi ekspresi fungsional. Contoh : Pangkat Tiga (2) + Pangkat Tiga(3).
Argumen pada saat dilakukan aplikasi fungsi disebut parameter actual.
e) Notasi untuk menuliskan program fungsional disebut dengan notasi fungsional, dimana terdiri dari empat bagian sesuai dengan tahapan pemrograman. Contoh: generic(template) teks program dalam notasi fungsional


Jadi kesimpulan dara bahasa pemrograman Haskell merupakan bahasa pemrograman yang sangat sederhana dan mudah dipelajari. Hal ini tidak lain disebabkan karena Haskell merupakan bahasa pemrograman fungsional murni. Oleh karena itu Haskell dapat:
1. Meningkatkan produktifitas programmer (Ericsson banyak memanfaatkan hasil percobaan Haskell dalam software telephony)
2. Lebih singkat, lebih jelas dan kode-kodenya mudah dibaca
3. Errornya semakin sedikit dan reabilitynya lebih tinggi
4. Membuat jarak antara programmer dengan bahasa itu lebih pendek
5. Waktu untuk membuat program menjadi lebih singkat
Selain itu, dalam Haskell tidak ada varibel yang berubah, tidak ada efek samping dari penggunaan sebuah fungsi, tidak ada perulangan, dan tidak ada program order.


Demikian sedikit tentang LISP yang saya ketahui, yang tentunya masih banyak kekurangan dalam penulisan pada artikel diatas dan tak luput juga dari kesalahan karena saya hanya manusia biasa yang sangat terbatas dalam pengetahuan.
maka saya mohon kritik dan saran dari para pembaca dan pengunjung blog saya ini,supaya saya dapat lebih bisa menambah pengetahuan tentang LISP ini.Terima Kasih.

Tidak ada komentar:

Posting Komentar