Konsep Bahasa Pemrograman Pertemuan 6 Evangs Mailoa
HASKELL
What is Haskell? Haskell merupakan bahasa pemrograman yang; fungsional, malas dan murni. fungsional evaluasi dari programnya sama dengan mengevaluasi sebuah fungsi dalam bahasa matematika murni malas tidak mengevaluasi ekspresi-ekspresi yang digunakan (kebalikannya teliti ) murni tidak memperbolehkan adanya Efek Samping, yaitu sesuatu yang mempengaruhi bagian di program. Misalnya fungsi yang mencetak sesuatu ke layar yang mempengaruhi nilai dari variabel global. Bahasa pemrograman yang tanpa efek samping akan menjadi sangat tidak berguna! Haskell menggunakan sistem monads untuk mengisolasi semua komputasi kotor dari program dan menampilkannya dengan cara yang aman.
HASKELL memang mudah. How about : double (double 2).?! = 8
Apa itu functional programming?
Misalkan n = 5, maka perhitungannya menjadi :
Dengan HASKEL, kita cukup memanggil fungsi : Sum [1..5] Sum [1,2,3,4,5]
Standar dalam Prelude.hs +, -, *, / ^ head tail!! take drop length sum product ++ reverse
Bagaimana jika kita ingin buat fungsi sendiri..?! Ex : Buat fungsi quadruple Buat fungsi factorial Buat fungsi average
Comment
Type dalam HASKELL
Type dalam HASKELL
Type dalam HASKELL
Try this!
Percabangan Statement if-then-else terdapat di bahasa Haskell. Contoh penggunaannya adalah sebagai berikut: if 1 < 2 then Satu lebih kecil dua else Satu tidak lebih kecil dua > "Satu lebih kecil dua
Abstraksi Lambda (Lambda Abstractions) Disamping menggunakan menggunakan persamaan untuk menetapkan fungsi, kita juga dapat menggunakan menetapkannya anonim melalui abstraksi lambda. Sebagai contoh, sebuah fungsi ekuivalen dengan inc dapat ditulis sebagai \x -> x+1. Sama seperti fungsi add yang ekuivalen dengan \x -> \y -> x+y. Abstraksi lambda bersarang seperti ini dapat ditulis dengan notasi singkat yang ekuivalen \x y -> x+y. Dalam kenyataannya, persamaan : inc x = x+1 add x y = x+y adalah kependekan dari inc = \x -> x+1 add = \x y -> x+y
Contoh Lambda
GRAFIK Dalam Haskell, kita juga dapat menggambarkan objek 3 dimensi. Penggambaran objek 3 dimensi ini dimungkinkan karena dalam Haskell kita dapat menuliskan pemrograman OpenGL. Contoh: import Graphics.UI.GLUT import Graphics.Rendering.OpenGL main = do (progname,_) <-getargsandinitialize createawindow progname mainloop createawindow windowname = do createwindow windowname displaycallback $= displaypoints displaypoints = do clear [ColorBuffer] renderprimitive Polygon $mapm_ (\(x, y, z)->vertex$vertex3 x y z) mypoints mypoints :: [(GLfloat,GLfloat,GLfloat)] mypoints = [(-0.25, 0.25, 0.0),(0.75, 0.35, 0.0),(0.75, -0.15, 0.0),((-0.75), -0.25, 0.0)] Adapun outputnya adalah:
Fungsi Fungsi dapat dibuat dengan menuliskan tipenya, lalu mendefinisikannya. Misalnya: tambahsatu :: Integer -> Integer tambahsatu x = x + 1 Jika kita gunakan fungsinya, inilah outputnya:? tambahsatu 5 > 6? tambahsatu 999 > 1000 Baris yang pertama: tambahsatu :: Integer -> Integer
Pattern Matching faktorial :: Integer -> Integer faktorial 0 = 1 faktorial n = n * faktorial (n - 1)? faktorial 3 > 6? faktorial 0 > 1 Pertama dicek apakah argumen match dengan 0. Karena tidak, maka dicek apakah argument match dengan n. Karena n bisa berupa Integer apapun (jenis fungsinya adalah Integer -> Integer), maka 3 match dengan n dan definisi fungsi yang berkaitan digunakan.
List listkosong :: [a] -> Bool listkosong [] = True listkosong x = False? listkosong [] > True? listkosong [1..10] > False? listkosong [10..1] > True Dari contoh di atas kita tahu bahwa list [10..1] ternyata adalah list kosong. Artinya konstruksi list [a..b] akan menghasilkan list tidak jika dan hanya jika a lebih kecil atau sama dengan b.
Contoh List baliklist :: [a] -> [a] baliklist [] = [] baliklist (x:xs) = baliklist xs ++ [x] adadilist :: [Integer] -> Integer -> Bool adadilist [] n = False adadilist (x:xs) n = if x == n then True else (adadilist xs n) hilangkan :: [Integer] -> Integer -> [Integer] hilangkan [] n = [] hilangkan (x:xs) n = if x == n then hilangkan xs n else [x] ++ (hilangkan xs n)
Mau bertanya..?