• Tidak ada hasil yang ditemukan

Pemrograman Fungsional FAJAR SAPTONO, ST

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pemrograman Fungsional FAJAR SAPTONO, ST"

Copied!
40
0
0

Teks penuh

(1)

Pemrograman Fungsional

(2)

Pendahuluan

• Paradigma pemrograman fungsional didasari oleh konsep pemetaan dan fungsi pada matematika

• Fungsi : asosiasi (pemetaan) antara 2 type yaitu domain dan range yang dapat berupa :

a. Tipe dasar

b. Tipe terkomposisi (bentukan)

• Pemrogram mengasumsikan bahwa fungsi dasar sudah terdefinisi

(3)

Pendahuluan (Lanjtn...)

• Komposisi fungsi dasar tersebut dapat dibentuk fungsi baru

• Penyelesaian masalah didasari atas aplikasi dari fungsi-fungsi tersebut

• Jadi dasar pemecahan persoalan adalah transformasional

• Semua kelakuan program adalah suatu rantai

transformasi dari sebuah keadaan awal menuju ke suatu rantai keadaan akhir, yang mungkin melalui keadaan antara, melalui aplikasi fungsi.

(4)

Pendahuluan (Lanjtn...)

• Paradigma fungsional tidak lagi

mempermasalahkan memorisasi dan struktur data, tidak ada pemilahan antara data dan program, tidak ada lagi pengertian tentang "variabel"

• Pemrogram tidak perlu lagi mengetahui bagaimana mesin mengeksekusi atau bagaimana informasi

disimpan dalam memori, setiap fungsi adalah

"kotak hitam", yang menjadi perhatiannya hanya keadaan awal dan akhir

• Dengan merakit kotak hitam ini, pemrogram akan menghasilkan program besar.

(5)

Pendahuluan (Lanjtn...)

• Program adalah fungsi hasil komposisi dari fungsi-fungsi lain

• Bahasa pemrograman fungsional memperoleh hasil dengan cara mengaplikasikan fungsi

terhadap argumen atau parameternya, yang juga dapat berupa fungsi.

• Bahasa pemrograman fungsional menonjol dalam kemampuan struktur datanya

(6)

Pendahuluan (Lanjtn...)

• Karena bahasa ini tidak dibatasi oleh variabel yang berasosiasi dengan lokasi memori, maka sebuah struktur data cukup ditangani sebagai sebuah nilai.

• Bahasa pemrograman fungsional tertua adalah LISP

(7)

LISP

• Lisp adalah bahasa pemrograman yang sudah berumur lebih dari 40 tahun.

• Keunggulan Lisp terletak pada kemampuannya memanipulasi simbol dan hubungan antar simbol dengan mudah, sehingga bahasa ini cocok

digunakan di bidang Artificial Intelligence

(kecerdasan buatan) dan pengambilan keputusan. • Walaupun begitu, bahasa ini juga dapat digunakan

untuk memecahkan masalah-masalah lainnya.

(8)

LISP

• Selama perkembangannya, Lisp menghasilkan banyak varian dan merupakan cikal bakal

berbagai bahasa lainnya (misalnya Logo dan Smalltalk).

• Pada 8 Desember 1994 ANSI (American National Standard Institute) berhasil menstandarisasi Lisp, yang diberi nama Common Lisp ANSI.

(9)

LISP

• Lisp menarik untuk dipelajari sebab Lisp jauh berbeda dibandingkan dengan bahasa

pemrograman seperti Pascal dan C.

• Setelah banyak menggunakan Lisp, kita akan bisa melihat/menganalisa suatu masalah dari sudut

pandang yang sebelumnya tidak pernah kita bayangkan. Paling tidak, Lisp dapat digunakan

sebagai kalkulator yang handal (akan ditunjukkan pada tutorial ini).

(10)

NOTASI FUNGSIONAL

• Definisi fungsi :

Nama fungsi, domain (parameter input),

range (definisi hasil)

• Spesifikasi

Apa yang akan dikerjakan oleh program

• Realisasi

Ekspresi fungsional “bagaimana” program

direalisasi menjadi instruksi komputer

• Aplikasi

(11)

Contoh Template Teks Program

dalam Notasi fungsional

(12)

Kerangka Program Fungsional

Nama-Fungsi (parameter) : Ekspresi-Fungsional

(13)

Operator

• Komputer mempunyai ALU (Arithmetic dan

Logic Unit), Oleh sebab itu mampu melakukan

penghitungan numerik dan operasi logic

• Operator adalah “sesuatu” paling dasar untuk mengoperasikan suatu nilai bertype tertentu • Type yang dapat dioperasikan oleh operator

adalah type dasar (numerik <integer, real>, karakter)

(14)

Ekspresi

• Ekspresi : gabungan antara operan dan

operatornya

• Operand dapat berupa suatu nilai yang

bertype sesuai operator, atau hasil aplikasi

fungsi

• Ekspresi fungsional :

a) Ekspresi aritmatika, logika

b) Ekspresi kondisional

(15)

Ekspresi fungsional

• Program fungsional direalisasikan dengan ekspresi fungsional

• Ekspresi : Sebuah teks yang terdiri dari nama, simbol, operator /fungsi yang dapat

menghasilkan suatu nilai berkat evaluasi hasil dari ekspresi

• Hasil evaluasi atau perhitungan dapat berupa numerik maupun boolean

(16)

Operator dan Ekspresi

• Operator Aritmatika, yang terdiri dari operator :

pangkat, yang dinyatakan sebagai fungsi expt kali, yang dinyatakan sebagai fungsi *

bagi, yang dinyatakan sebagai fungsi /

tambah, yang dinyatakan sebagai fungsi + kurang, yang dinyatakan sebagai fungsi –

modula, yang dinyatakan sebagai mod.

Operan-nya harus bernilai numerik, dan hasilOperan-nya bernilai numerik.

(17)

Operator Relasional

Terdiri dari operator:

c. Sama-dengan, yang dinyatakan sebagai fungsi =

d. Tidak-sama-dengan, yang dinyatakan sebagai fungsi /=

e. Lebih-kecil, yang dinyatakan sebagai fungsi <

f. Lebih-besar, yang dinyatakan sebagai fungsi >

g. Lebih-kecil-atau-sama-dengan, yang dinyatakan sebagai fungsi <=

h. Lebih-besar-atau-sama-dengan, yang dinyatakan sebagai fungsi >=

i. Operan-nya harus bernilai numerik atau karakter, dan hasilnya bernilai boolean (true atau false).

(18)

Operator Lojik/Boolean

Terdiri dari operator :

c. Negasi, yang dinyatakan sebagai fungsi NOT

d. Dan, yang dinyatakan sebagai fungsi AND

e. Atau, yang dinyatakan sebagai fungsi OR

Operan-nya harus bernilai boolean, dan hasilnya bernilai boolean

(19)

19

Notasi Fungsional dan LISP

Notasi Fungsional Notasi LISP

Ekspresi <operator> (<operan> , <operan>)

( <operator> <operan> <operan> )

Contoh cara penulisan ekspresi aritmatika : b. notasi infix: 2 * 5

c. notasi prefix: * 2 5

d. notasi (prefix) fungsional: *(2,5) e. notasi (prefix) LISP: (* 2 5)

(20)

Resource LISP

 Website resmi LISP khususnya

CLISP yaitu http://www.clisp.org

Jenis LISP :

a- Kyoko Common Lisp (KCL) dg

platform UNIX

b- CLISP & XLISP pada platform PC c- dll

(21)

21

Struktur Program

• Karena LISP mempunyai pemroses bahasa berupa interpreter, maka interaksi antara LISP dengan

pemrogram dapat dilakukan secara interaktif

• Karena berupa interpreter, maka secara sintaks tidak diperlukan pendefinisian jenis ekspresi (termasuk operator dan operan) di awal program

• Pemrogram yang memberikan arti (dalam hal ini mencakup jenis) semantik dari ekspresi.

(22)

22

Struktur Program (Lnjtn..)

Interaksi cara Interaktif Arti => => ⇒2525 25 25

LISP menunggu masukan dari pemrogram.

LISP menunggu masukan dari pemrogram. LISP siap mengevaluasi masukan dari

pemrogram, dengan prinsip read-evalprint. LISP mengembalikan (menuliskan) hasil evaluasinya.

(23)

23

Contoh ekspresi aritmatika dalam Interpreter LISP :

• =>25 25 • =>(expt 2 3) 8 • =>(* 5 4) 20 • =>(/ 10 5) 2 • =>(/ 10 6) 1.666667 • =>(+ 27 3) 30

(24)

24

Contoh ekspresi aritmatika dalam Interpreter

LISP(Lanjtn..) :

• =>(- 27 3) 24 • =>(+ 2 3 4 5) 14 • =>(* 2 3 4 5) 120 • =>(+ (* 3 (+ 2 7)) (- 5 (* 2 1))) 30

Walaupun pemroses bahasanya berupa interpreter, LISP tetap dapat menerima masukan secara batch dari file eksternal.

(25)

25

• File eksternal itu berisi sederetan fungsi yang akan dievaluasi secara sekuensial.

• Sebagai akibatnya, hasil evaluasi dari kumpulan file yang terdapat dalam file eksternal itu hanya berupa nilai dari hasil evaluasi terhadap fungsi terakhir yang dituliskan dalam file eksternal tersebut.

(26)

26

• Sebuah program LISP dapat disimpan dalam sejumlah (lebih dari satu) file eksternal.

• Jika fungsi utama dari program tersebut mempunyai banyak sekali fungsi antara, maka fungsi-fungsi

antara itu dapat dikelompokkan berdasarkan fungsinya atau perannya.

• jika program LISP tersebut akan dieksekusi, maka seluruh file eksternal tersebut harus di-load dulu ke dalam memori.

(27)

27

Interaksi Cara Batch Arti

(load “CONTOH1.LSP” ) LISP akan mengevaluasi isi dari file eksternal bernama “CONTOH1.LSP”, yang berisi sekumpulan fungsi, dengan prinsip read-eval-print.

(28)

28

Isi dari file CONTOH1.LSP dapat dilihat sbb.

; Nama file : CONTOH1.LSP ;

; ini cara menuliskan komentar ;

(exp 2 3) ; artinya: 2 pangkat 3. (* 5 4) ; artinya: 5 * 4

(+ (* 3 (+ 2 7)) (- 5 (* 2 1))) ; artinya: (3 * (2 + 7)) + (5 - (2 * 1))

(29)

29

Penamaan Ekspresi

• Sebuah ekspresi dapat diberi nama.

• Penamaan ekspresi, dengan lingkup global, dapat dilakukan dengan menggunakan fungsi yang

didefinisikan sistem yang bernama setq.

• Sintaks dari ekspresi LISP-nya adalah sbb: (setq <nama-ekspresi> <nilai-ekspresi>)

(30)

30

Penamaan Ekspresi (Lnjtn..)

• Karena nilai-ekspresi ditentukan jenisnya oleh

pemrogram sendiri, maka tipe dari nama-ekspresi itu langsung terdefinisi (secara implisit) sesuai dengan tipe dari nilai-ekspresinya.

• Contohnya, jika JNILAI diberi nilai 5, maka otomatis JNILAI bertipe integer.

(31)

31

• Selain itu, karena LISP bukan bahasa fungsional murni

(seperti yang sudah dijelaskan di awal), jika suatu nama sudah di-binding dengan suatu nilai tertentu maka nama tersebut

akan tetap nilainya sesuai dengan lingkup dari nama tersebut. Tetapi, jika ada pemberian nilai lain yang berbeda untuk nama tersebut, maka itu dapat dilakukan

• Sehingga, kesimpulannya :

a. Sebuah nama-ekspresi dapat berubah-ubah nilainya.

b. Sebuah nama-ekspresi juga dapat berubah-ubah tipenya, tergantung nilainya.

(32)

32

Contoh penamaan ekspresi (lingkup global) :

=>(setq dua 2) 2 =>dua 2 =>(setq lis '(1 2 3 4)) (1 2 3 4) =>lis (1 2 3 4) =>(setq nilai (+ 3 5)) 8 =>(* dua nilai) 16 =>nilai 8

=>(setq nilai 'atom1) atom1

=>nilai atom1

(33)

33

• Selain penamaan ekspresi untuk lingkup global, kita juga dapat melakukannya untuk lingkup lokal

• Lingkup lokal dalam arti bahwa ekspresi tersebut hanya akan digunakan secara lokal dalam sebuah fungsi tertentu

• Untuk memberi nama ekspresi dengan lingkup lokal tersebut, yang sifatnya sementara sehingga disebut ekspresi antara, kita menggunakan fungsi yang sudah didefinisikan oleh sistem yang bernama let.

(34)

34

Notasi Let

Notasi Fungsional Notasi LISP

Penamaan Ekspresi Antara (lokal) let <nama-ekspresi-1> = <nilai-ekspresi-1>, <nama-ekspresi-2> = <nilai-ekspresi-2> in <ekspresi>

( let ( (<nama-ekspresi-1> <nilai-ekspresi-1>)

(<nama-ekspresi-2> = <nilai-ekspresi-2>))

(35)

Bentuk Umum

Dimana :

• Nama-Fungsi merupakan nama fungsi yang direalisasikan.

• Nama merupakan nama sementara bersifat 'lokal' yang dipakai untuk menyimpan hasil evaluasi ekspresi dan nilai hanya terdefinisi pada lingkup dimana fungsi

tersebut akan direalisasikan.

• Ekspresi adalah suatu ekspresi fungsional.

• Realisasi-Fungsi adalah ekspresi fungsional, realisasi dari Nama-Fungsi

(36)

36

Fungsi Let

Let = Assigning Value

Let((<param1><val1>) (<param2><val2>))(exp) Untuk kasus keliling segitiga

kelsegi3(a t)let(z:=sqrt(sqr(1/2xa)+sqr(t))) a+2z

Implementasi

(defun kelsegi3 (a t)(let((z(sqrt(+(*(* 0.5 a) (* 0.5 a))(* t t)))))(+ a (* 2 z))))

(37)

37

Definisi : memetakan permasalahan dalam

suatu persamaan matematis

• Karakteristik fungsional :  Memiliki parameter

Menghasilkan suatu nilai keluaran

• Langkah-langkah penyusunan fungsi :

a. Definisikan permasalahan

b. Analisa input/output

c. Tentukan solusi berdasarkan input yang ada dan petakan dalam persamaan matematis

(38)

38

Contoh

Kasus :

Mencari nilai mean olympic dari 4 deret data

Definisi : Bagamana mencari jumlah total 4 deret data yang bukan bernilai maksimum dan minimum

Input : 4 buah nilai deret data integer

Output : Jumlah deret not maks dan not min

Solusi : mo (a b c d)  (a+b+c+d) - min(a b c d) - maks(a b c d)

Implementasi  (defun mo (a b c d)(-(+ a b c d) (max a b c d)(min a b c d)))

Realisasi fungsi Realisasi program

mo(1 2 3 4) (mo 1 2 3 4)

5 5

mo(10 6 3 4) (mo 10 6 3 4)

(39)

39

Contoh (Lanjtn..)

Kasus :

Mencari nilai luas suatu segitiga sama kaki

Definisi  luas segitiga adalah perkalian alas dengan tinggi segitiga dibagi dua

Input  dua buah nilai numerik (representasi alas dan tinggi)

Output  nilai numerik luasan bidang segitiga Solusi  luassesitiga3 (a t)1/2 x a x t

Implementasi  (defun luassegi3 (a t)(* 0.5 a t)) Realisasi fungsi Realisasi program luassegi3(5 10) (luassegi3 5 10)

(40)

40

Contoh (Lanjtn..)

Kasus

Mencari keliling segitiga sama kaki

Definisi  keliling segitiga adalah penjumlahan 2 sisi miring dengan alas

Input  dua nilai numerik (representasi alas dan tinggi)

Output  nilai keliling segitiga

Solusi 1  kelsegi3(a t)a + (2 x (sqrt(sqr(1/2xa)+sqr(t))) Solusi 2 cari sisimiring dulu

miring(a t)sqrt(sqr(1/2xa)+sqr(t)) kelsegi3(a t)a+(2xmiring(a t))))

Realisasi fungsi Realisasi program

Referensi

Dokumen terkait

Menurut J.D Culcasi dkk [11], penambahan titanium (Ti) pada bak logam seng cair akan menyebabkan Ti akan berfungsi sebagai katalis pada reaksi antara Fe-Al, yang diikuti

Tidak adanya kebijakan perusahaan terkait penggunaan internet di tempat kerja dengan kombinasi kebijakan lain (membawa perangkat keras pribadi dan cara kerja baru) yang ada

Tedapat beberapa algoritma yang telah mengimplementasikan masalah mutex tersebut kedalam lingkup sistem terdistribusi yaitu dalam hal ini adalah sistem terdistribusi dengan

In vitro evaluation of antibacterial, antioxidant, cytotoxic and apoptotic activities of the tubers infusion and extracts of Cyperus rotundus.. Bioresour Technol

Berdasarkan hasil analisis data yang dilakukan, diketahui bahwa dari 27 orang responden terdapat 4 orang atau (23,53%) responden yang menyatakan bahwa penerapan

Naskah dapat ditulis dalam Bahasa Indonesia atau Bahasa Inggris menggunakan format yang sesuai dengan kaidah bahasa yang digunakan.. Panitia tidak menerima naskah yang

(2) Wakil ketua yang mewakili unsur perangkat pemerintah kabupaten/kota sebagaimana dimaksud pada ayat (1) huruf b, dijabat secara ex officio oleh kepala satuan

Tuhannya tentang harapan dan permohonan. Telanjang bebarti menyerahkan diri sepenuhnya kepada Allah Yang Maha Kuasa. Tentunya kalau wudo atau telanjang itu kita artikan