Programming Language Concept Session 12

Programming Language Concept Session 12


  • Desain bahasa imperative didasari secara langsung pada arsitektur von Neumann
  • Desain bahasa fungsional didasari pada fungsi matematika

Mathematical Function


  • Mathematical function merupakan anggota pemeraan dari satu himpunan, dikenal dengan himpunan domain, ke himpuan lain, dikenal dengan himpunan range
  • Ekspresi lambda menjelaskan parameter dan pemetaan fungsi dalam bentuk berikut:

l(x) x * x * x

Untuk fungsi  cube(x) = x * x * x

  • Ekspresi lambda menggambarkan fungsi tanpa nama
  • Ekspresi lambda diterapkan ke parameter dengan meletakkan parameter tersebut setelah ekspresi, contoh:

 (l(x) x * x * x)(2)

Yang menghasilkan nilai 8

  • Higher-order function, atau functional form, merupakan bentuk yang mengambil antara fungsi sebagai parameter atau menghasilkan suatu fungsi sebagai hasilnya
  • Funtional form yang mengambil dua fungsi sebagai parameter dan menghasilkan suatu fungsi yang nilainya merupakan actual parameter function pertama yang dipakai ke aplikasi kedua, disebut function composition, seperti:

Bentuk: h º f ° g (° merupakan operator komposisi)

Yang aritnya h (x) º f ( g ( x))

Untuk f (x) º x + 2  dan g (x) º 3 * x,

h º f ° g menghasilkan (3 * x)+ 2

  • Apply-to-all merupakan functional form yang mengambil satu fungsi sebagai parameter dan menghasilkan suatu daftar nilai yang didapat dengan menerapkan fungsi yang didapat tadi ke tiap elemen dari daftar parameter, seperti:

Form: a

For h(x) º x * x

a(h, (2, 3, 4))  yields  (4, 9, 16)

LISP Sebagai Bahasa Pemrograman Fungsional Pertama


  • Tipe data objek: awalnya hanya atom dan list
  • Bentuk list: kumpulan sublist berkurung dan atau atom

(A B (C D) E)

  • Awalnya, LISP merupakan typeless language
  • List LISP disimpan secara internal sebagai single-linked list
  • Notasi lambda digunakan untuk menjelaskan fungsi dan definisinya. Aplikasi fungsi dan data memiliki bentuk yang sama,
    contoh:
    – Jika list (A B C) diintepretasikan sebagai data, maka menjadi daftar tiga atom sederhana , A, B, dan C
    – Jika diintepretasikan sebagai aplikasi fungsi, artinya fungsi bernama A diterapkan ke dua parameter, B dan C

Scheme


Fungsi Primitif dan Ekspresi LAMBDA

  • Fungsi aritmatika primitive: +, -, *, /, ABS, SQRT, REMAINDER, MIN, MAX
  • Bentuk ekspresi lambda didasari dari notasi :

(LAMBDA (x) (* x x)

x disebut variable pengikat

  • Ekspresi lambda dapat diterapkan ke parameter, contoh:

((LAMBDA (x) (* x x)) 7)

  • Ekspresi LAMBDA dapat memiliki jumlah parameter berapapun

DEFINE

  • Terdapat dua bentuk:

Untuk mengikat suatu simbol ke ekspresi, contoh:

(DEFINE pi 3.141593)

Untuk mengikat name ke ekspresi lambda

(DEFINE (square x) (* x x))

  • Proses evaluasi: parameter pertama tidak dievaluasi, parameter kedua dievaluasi dan diikat ke parameter pertama

Numeric Predicate Function


Function               Meaning

=           Equal

<>          Not equal

>           Greater than

<           Less than

>=          Greater than or equal to

<=          Less than or equal to

EVEN?       Is it an even number?

ODD?        Is it an odd number?

ZERO?       Is it zero?

  • Di Scheme, nila dua Boolean adalah #T dan #F

List Function


  • QUOTE – mengambil satu parameter; mengembalikan parameter tersebut tanpa evaluasi
  • QUOTE dibutuhkan karena intrepeter Scheme, bernama EVAL, selalu mengevaluasi parameter ke aplikasi fungsi sebelum menerapkan fungsi tersebut. QUOTE digunakan untuk menghindari evaluasi parameter ketika tak dibutuhkan
  • QUOTE dapat disingkat dengan operator prefix apostrophe:

‘(A B) ekuivalen dengan (QUOTE (A B))

  • Contoh:

(CAR ′((A B) C D)) mengembalikan (A B)

(CAR ′A) error

(CDR ′((A B) C D)) mengembalikan (C D)

(CDR ′A) error

(CDR ′(A)) mengembalikam ()

(CONS ′() ′(A B)) mengembalikan (() A B)

(CONS ′(A B) ′(C D)) mengembalikan ((A B) C D)

(CONS ′A ′B) mengembalikan (A . B)  (a dotted pair)

  • LIST merupakan fungsi untuk membangun suatu daftar dari parameter angka berapapun

(LIST ′apple ′orange ′grape) mengembalikan (apple orange grape)

Membandingkan Bahasa Fungsional dan Imperative


  • Bahasa Imperatif:
    – Eksekusi efesien
    Semantic kompleks
    Syntax kompleks
    Concurreny didesain programmer
  • Bahasa Fungsional:
    Semantic sederhana
    Syntax sederhana
    – Eksekusi tak lebih efesien dari imperative
    – Program dapat dibuat otomatis menjadi concurrent

Sumber:

  • Concept of Programming Languages 10th. Ed  / Robert W. Sebesta (Chapter 15)
  • Functional Programming Languages / Binus Powerpoint Presentation

This entry was posted in Computer Science, Programming Language Concept and tagged , , , . Bookmark the permalink.

Leave a Reply

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