Konsep Bahasa Pemograman-BAB 12- Functional Programming Language

BAB 12

Functional Programming Language  

 

1.Pengenalan

Bahasa pemrograman yang imperative adalah bahasa yang berbasiskan von Neumann architecture, menggunakan memori yang sama untuk data dan untuk memberikan instruksi kepada program, dimana mayoritas komputer moderen menerapkan bahasa ini. Sedangkan bahasa pemrograman yang functional adalah bahasa yang berbasiskan fungsi matematika, yang merupakan gambaran struktur anggota dari suatu domain set menuju ke range set.

2.Mathematical Function

Sebuah fungsi matematika adalah pemetaan dari keanggotaan sebuah himpunan yang disebut himpunan domain ,jika untuk himpunan lain itu disebut himpunan range.

  • Ekspresi Lambda

Ekspresi lambda mendeskripsikan fungsi yang tidak memiliki nama dengan menspesifikasikan parameter  dari satu fungsi dengan menaruh parameter setelah ekspresi lambda.

  • Functional Form

A higher-order function atau functional form adalah fungsi yang menggunakan fungsi – fungsi lain yang lebih simpel sebagai parameter atau sebagai hasil atau keduanya. Biasa juga disebut operator dan functional.

 

 

  • Function Composition

Komposisi fungsi adalah mekanisme untuk menggabungkan fungsi – fungsi simpel untuk membentuk fungsi yang lebih kompleks. Dengan menggunakan dua fungsi sebagai parameter dan menghasilkan fungsi yang nilainya berasal dari parameter pertama yang diimplementasikan ke parameter yang kedua.

 

  • Apply-to-all

Suatu functional form yang menggunakan sebuah fungsi sebagai parameter dan menghasilkan daftar nilai yang didapat dari  penerapan fungsi tersebut kepada setiap element di dalam parameter.

3.Bahasa Pemograman Functional Pertama : LISP

  • LISP Data Types and Structures

LISP memiliki tipe data yang terdiri dari atom dan daftar, yang disimpan sebagai satu daftar yang saling berhubungan. Bentuk dari LISP biasa berupa kumpulan sublist dan atom. LISP sebenarnya merupakan bahasa yang tidak bisa diketik.

  • LISP Interpretation

Dalam notasi lambda diamana sebuah daftar (A, B, C), jika diinterpretasikan sebagai data maka hanya akan menjadi sebuah daftar sederhana yang memiliki tiga atom yaitu A, B dan C. Sedangkan jika diinterpretasikan sebagai aplikasi dari sebuah fungsi maka A merupakan sebuah fungsi yang diimplementasikan ke dua parameter B dan C.

  • Primitive Functions & Lambda Expressions
  • Primitive Arithmetic Functions : + , – ,  *,  /,  ABS, SQRT, REMAINDER, MIN, MAX
    Contoh : (+ 5 2) menghasilkan 7
  • Lambda Expressions, bentuknya berdarsarkan dari notasi lambda.
    Contoh : (LAMBDA (x) (* x x), dimana x adalah variabel yang terikat.
  • Lambda expressions bisa diaplikasikan kepada parameter.
    Contoh : ((LAMBDA (x) (* x x)) 7)
  • Ekspresi lambda bisa memiliki berapapun parameter.
    Contoh : (LAMBDA (a b x) (+ (* a x x) (* b x)))
  • Special Form Function: DEFINE

DEFINE memiliki dua bentuk :

  1. Untuk mengikat simbol kedalam suatu ekspresi
    Contoh : (DEFINE 141593)
  2. Untuk mengikat nama kedalam suatu ekspresi lambda
    Contoh : (DEFINE (square x) (* x x))
  • Output Functions

Output functions biasanya tidak dibutuhkan karena intrerpreter selalu menampilkan hasil dari sebuah fungsi yang telah dievaluasi pada bagian teratas.

Scheme memiliki PRINTF yang memiliki fungsi yang sama dengan echo pada PHP.

  • Numeric Predicate Functions
  • #T (or #t) adalah benar dan #F (or #f) adalah salah (terkadang () juga digunakan sebagai salah).
  • =, <>, >, <, >=, <=
  • EVEN?, ODD?, ZERO?, NEGATIVE?
  • Fungsi NOT(!) membalikan logika dari sebuah ekspresi Boolean

 

Control Flow adalah susunan dari pernyataan, instruksi dan pemanggilan fungsi dari sebuah program yang imperative yang akan dijalankan.

 

  • List Functions

QUOTE – mengambil satu parameter dan mengembalikan parameter tersebut tanpa dievaluasi. QUOTE dibutuhkan karena interpreter dari Scheme yang bernama EVAL selalu mengevaluasi parameter sampai ke fungsi dari aplikasi sebelum mengaplikasikan sebuah fungsi. QUOTE digunakan untuk menghindari evaluasi dari parameter ketika sedang tidak cocok.
(QUOTE  (A B)) sama dengan ‘(A B).LIST adalah sebuah fungsi untuk membuat sebuah list dari berapapun jumlah parameter.(LIST ‘apple ‘orange ‘grape) returns ( apple orang grape)

  • Predicate Function

EQ? menggunakan dua ekspresi sebagai parameter (biasanya dua atom), dan akan menghasilkan #T (Benar) jika kedua parameter memiliki penunjuk nilai yang sama, selain dari itu maka akan memberikan hasil #F (Salah).
Jika (EQ? ‘A ‘A) maka #T.
Jika (EQ? ‘A ‘B) maka #F.

 

EQV? sama seperti EQ? tetapi EQV? bisa digunakan untuk simbol dan atom. EQV? merupakan perbandingan nilai dan bukan penunjuk nilai.
Jika (EQV? 3 3) maka #T
Jika (EQV? ‘A 3) maka #F

LIST? menggunakan satu parameter dan menghasilkan #T (Benar) jika parameter tersebut adalah sebuah daftar, selain dari itu maka #F (Salah).
Jika (LIST? ‘(apple orang grape)) maka #T

NULL? menggunakan satu parameter dan menghasilkan #T (Benar) jike parameter tersebut adalah daftar yang kosong, selain dari itu maka #F (Salah).
Jika (NULL? ‘(())) maka #F

 

Example Scheme Function

  • member menggunakan atom dan daftar yang simpel kemudian menghasilkan #T (Benar) jika atom tersebut ada pada daftar, selain dari itu maka #F (Salah).
  • equalsimp menggunakan dua daftar yang simpel sebagai parameter dan menghasilkan #T (Benar) jika keduanya sama, selain dari itu maka #F (Salah).
  • equal menggunakan dua daftar umum sebagai parameter dan menghasilkan #T jika kedua daftar tersebut sama, selain dari itu maka #F (Salah).
  • append menggunakan dua daftar sebagai parameter dan menghasilkan parameter pertama dengan anggota dari parameter kedua yang ditambahkan pada bagia akhir.
  • Tail Recursion in Scheme

Sebuah fungsi adalah ekor dari rekursif apabila pemanggilan rekursifnya adalah operasi terakhir dalam fungsi tersebut. Semua fungsi yang merupakan ekor rekursif dengan otomatis dapat di ubah oleh compiler menjadi iteration untuk membuatnya lebih cepat dan merupakan salah satu keharusan pada Scheme.

  • Functions That Build Code

Sangat mungkin di Scheme untuk menetapkan fungsi yang membuat kode Scheme dan meminta interpretasinya karena interpreter merupakan fungsi yang tersedia bagi user yang merupakan EVAL.

 

 

 

 

  • Adding a List of Numbers

Parameter merupakan daftar angka yang akan ditambahkan, dimana adder memasukan sebuah operator + dan mengevaluasi hasil dari daftar tersebut.
Membandingkan bahasa Functional and Imperative :

  • Bahasa Imperative:

-Eksekusi yang effisien

-Semantic yang komplex

-Syntax yang komplex

-Concurrency adalah design dari programmer

 

  • Functional Languages:

-Semantic yang simpel

-Syntax yang simpel

-Eksekusi yang kurang effisien

-Program secara otomatis bisa dibuat bersama

Oleh Kelompok 12

Referensi :

Bab 12 :

  • http://arcana70.blogspot.co.id/2014/06/kbp-pert-12.html
  • Robert W. Sebesta – Concept of Programming Languages (Tenth Edition), Chapter 15
  • https://www.tutorialspoint.com/lisp/lisp_data_types.htm
  • https://binusmaya.binus.ac.id/newStudent/#/class/resources.COMP6060/007420/1610/LEC/9239

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *