Pemrograman Fungsional FAJAR SAPTONO, ST

dokumen-dokumen yang mirip
Algoritma Pemrograman

Algoritma Pemrograman

Pertemuan Ke-4 Urutan (sequence) Rahmady Liyantanto. liyantanto.wordpress.com. S1 Teknik Informatika-Unijoyo

Algoritma Pemrograman

HARGA & EKSPRESI Input dan Output

Tinjau algoritma dibawah ini

FUNGSI. {deretan instruksi algoritmik : pemberian harga, input, output, analisa kasus, pengulangan)

Materi. Tipe, Variabel dan Operator Algoritma Pemrograman PENULISAN ALGORITMA PENULISAN ALGORITMA 15/03/2010 NAMA DAN EKSPRESI

Algoritma dan Pemrograman. Pertemuan Ke-1 Pengantar Algoritma

Struktur Program. Rinta Kridalukmana

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

PENGANTAR KOMPUTER & SOFTWARE I REPRESENTASI DATA

PENGULANGAN Bagian 1 : Notasi. Tim Pengajar KU1071 Sem

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

Nama, Tipe, Ekspresi, dan Nilai

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

20/01/2012. Oleh : Fiftin Noviyanto

Oleh : Fiftin Noviyanto

PENGANTAR KOMPUTER DAN TEKNOLOGI INFORMASI 1A

UNIVERSITAS SAM RATULANGI MANADO FAKULTAS TEKNIK, JURUSAN TEKNIK ELEKTRO Program Studi S-1 Teknik Informatika. Data & Ekspresi

Pemrograman Prosedural FUNGSI (Subprogram) Tim Pengajar KU1071 Sem

Algoritma dan Struktur Data I Mia Fitriawati, S.Kom, M.Kom

DASAR PEMROGRAMAN. IL/Fungsi1.doc/Pemrograman Fungsional - 8/21/03-1:02 PM 1

TIPE, NAMA, DAN NILAI

1. Integer Interger adalah data numerik yang tidak mengandung pecahan, dan disajikan dalam memori komputer sebagai angka bulat. Mengacu pada obyek

Variabel, Tipe Data, dan Operator. Oleh : Edi Sugiarto, S.Kom, M.Kom

MODUL 3 ALGORITMA PEMROGRAMAN

11/18/2009. Julio Adisantoso 1. Bahasa Pemrograman Kuliah #1 18 November Tucker & Noonan Chapter 1

Bab 2 DASAR-DASAR ALGORITMA

Algoritma dan Pemrograman. Oleh: Eddy Prasetyo N

JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

Variabel dan Tipe data Javascript

STRUKTUR DASAR PEMROGRAMAN

Brigida Arie Minartiningtyas, M.Kom

Algoritma Pemrograman

.::BAB II.::MENGENAL PASCAL

Algoritma dan Struktur Data

TIPE DATA, VARIABLE, dan OPERATOR DELPHI

Universitas Komputer Indonesia

Algoritma dan Struktur Data I 2014

Saifoe El Unas 2. Free Format

Algoritma dan Struktur Data

Pemrograman Prosedural PENDAHULUAN. Tim Pengajar KU1071 Sem

Pertemuan Ke-3 (Tipe Data dan Nama) Rahmady Liyantanto. S1 Teknik Informatika-Unijoyo

Aturan Penulisan Algoritma Setiap Algoritma akan selalu terdiri dari tiga bagian yaitu : Judul (Header) Kamus Algoritma

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

Algoritma dan Pemrograman. Pertemuan Ke-4 Konsep Tipe Data, Operator Dan Identifier

Chapter 3.2 : Tipe, Nama dan Nilai

@copyright by Emy PENGANTAR ALGORITMA & PROGRAM & PROGRAM PENGERTIAN ALGORITMA NOTASI UNTUK ALGORITMA

CCH1A4 / Dasar Algoritma & Pemrogramanan

PEMROGRAMAN DASAR ( PASCAL ) PERTEMUAN I

Dasar Pemrograman. Nisa ul Hafidhoh

Chapter 2. Tipe Data dan Variabel

STRUKTUR DATA. Pengajar. Jaidan Jauhari, M.T. Alamat

TEKNIK KOMPILASI Tony Darmanto,ST / Smt V S1 TI / STMIK WIDYA DHARMA/ Hal 1

Nama : Rendi Setiawan Nim :

Bab 2 Konsep Dasar Pemrograman BASIC

KOM204 : BAHASA PEMROGRAMAN

Algoritma Pemrograman I

Operator, Statement kondisional, dan Iterasi pada Java

Tipe data dasar merupakan tipe data yang disediakan oleh kompailer, sehingga dapat langsung dipakai Dalam algoritma dan pemrograman yang termasuk dala

Tipe Data, Nama, Nilai. Chapter 4

Bahasa Pemrograman :: Functional Programming

Type Data terdiri dari : - Data Tunggal : Integer, Real, Boolean dan Karakter. - Data Majemuk : String

Konstruksi Dasar Algoritma

Algoritma dan Pemrograman Bab II Dev Pascal, Variabel, Tipe Data. Adam Mukharil Bachtiar, S.Kom. Universitas Komputer Indonesia

MATERI 2 JENIS-JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

PROSEDUR. Jadi, setiap prosedur harus : - Didefinisikan (dibuat spesifikasinya) dan dituliskan kode programnya - Dipanggil, pada saat eksekusi

Prosedur. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

Algoritma & Pemrograman 1B BASIC

Teknik Pemrograman Terstruktur 1 PENGENALAN BAHASA C

PHP (HYPERTEXT PREPROCESSOR)

BAB II LANDASAN TEORI

BAB I PENGANTAR Pendahuluan Penyajian 1.1 Latar Belakang 1.2 Algoritma dan Struktur Data

Algoritma Pemrograman I KONSEP DASAR

Pertemuan 4 ELEMEN-ELEMEN BAHASA PEMROGRAMAN

Paradigma Functional BAHASA PEMROGRAMAN. TIM PENGAJAR PEMROGRAMAN Departemen Ilmu Komputer IPB

Instalasi Code::Blocks, Tipe Data, Variabel, Konstanta, Operator, Input-Output dan Flowchart

Dasar Komputer & Pemrograman 2A

ALGORITMA PEMROGRAMAN 1C PEMROGRAMAN FUNGSIONAL

PENDAHULUAN 01/31/2013. Julio Adisantoso 1. Kontrak Kuliah. Bahasa Pemrograman Kuliah #1. Tata Tertib Mahasiswa

Sesi/Perkuliahan ke: II

Bahasa Pemrograman :: Pendahuluan

Algoritma Pemrograman

ALGORITMA TUGAS 2 RESUME ALGORITMA PERCABANGAN DAN ALGORITMA PERULANGAN. Disusun Oleh : Sakina Mawardah Teknik Informatika. Dosen : Asep M. Yusuf, S.

StrukturDasarProgram Prosedural (dalambahasac++)

Fungsi. Tim PHKI Modul Dasar Pemrograman Fakultas Ilmu Komputer UDINUS Semarang

Algoritma Pemrograman

DIKTAT KULIAH. DASAR PEMROGRAMAN Bagian : Pemrograman Fungsional. Oleh : Inggriani Liem. Kelompok Keahlian Data & Rekayasa Perangkat Lunak

Konsep Organisasi dan Arsitektur Komputer (Pertemuan ke-2)

(Borland Delphi 7.0) BAB II. D3 Teknik Informatika FMIPA UNS Sakroni. Materi Pembahasan : Komentar Variabel Konstanta Operator Tipe Data Konversi Data

PENGENALAN KOMPUTER. Sistem Komputer. Dian Palupi Rini, M.Kom

TYPE. Inggriani Liem : Catatan Kuliah Algoritma & Pemrograman, Jurusan teknik Informatika - ITB TYPE.doc/TYPE- 21/08/03 16:04

MATRIKS. Dapat disimpan secara linier dan kontigu dengan dua alternatif sebagai berikut : a. Per baris

LAPORAN PRAKTIKUM RESMI TIPE DATA, KONSTANTA DAN VARIABEL

Bahasa Pemrograman- TIS SKS

Tipe Data dan Variabel. Dosen Pengampu Muhammad Zidny Naf an, M.Kom

Algoritma Perulangan. Kuliah algoritma dan pemrograman

ANALISA KASUS Ekspresi Kondisional

Pemrograman Dasar C. Minggu 1: Pengenalan C Programming

Transkripsi:

Pemrograman Fungsional FAJAR SAPTONO, ST

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 2

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. 3

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. 4

Pendahuluan (Lanjtn...) Program adalah fungsi hasil komposisi dari fungsifungsi 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 5

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 6

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. 7

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. 8

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). 9

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 Pemakaian fungsi yang terdefinisi

Contoh Template Teks Program dalam Notasi fungsional

Kerangka Program Fungsional Nama-Fungsi (parameter) : Ekspresi-Fungsional

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)

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 c) Ekspresi rekursif

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

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. Operannya harus bernilai numerik, dan hasilnya bernilai numerik.

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).

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

Notasi Fungsional dan LISP Notasi Fungsional Ekspresi <operator> (<operan>, <operan>) Notasi LISP ( <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) 19

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

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. 21

Struktur Program (Lnjtn..) => Interaksi cara Interaktif 25 25 Arti LISP menunggu masukan dari pemrogram. LISP siap mengevaluasi masukan dari pemrogram, dengan prinsip read-evalprint. LISP mengembalikan (menuliskan) hasil evaluasinya. 22

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 23

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. 24

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. 25

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. 26

Interaksi Cara Batch (load CONTOH1.LSP ) Arti LISP akan mengevaluasi isi dari file eksternal bernama CONTOH1.LSP, yang berisi sekumpulan fungsi, dengan prinsip read-eval-print. 27

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)) 28

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>) 29

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. 30

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. 31

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 32

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. 33

Notasi Let Notasi Fungsional Penamaan Ekspresi Antara (lokal) let <nama-ekspresi-1> = <nilaiekspresi-1>, <nama-ekspresi-2> = <nilaiekspresi-2> in <ekspresi> Notasi LISP ( let ( (<nama-ekspresi-1> <nilaiekspresi-1>) (<nama-ekspresi-2> = <nilaiekspresi-2>)) <ekspresi> 34

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 35

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)))) 36

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 37

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) 10 10 38

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) 25 25 39

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 kelsegi3(5 5) (kelsegi3 5 5) 40