Bahasa Pemrograman Fungsional F# Oleh: Yabert Yanuar Santoso NIM : 612005023 Skripsi Untuk melengkapi syarat-syarat memperoleh Ijasah Sarjana Teknik Elektro FAKULTAS TEKNIK PROGRAM STUDI TEKNIK ELEKTRO UNIVERSITAS KRISTEN SATYA WACANA SALATIGA 2011 Bahasa Pemrograman Fungsional F# Oleh: Yabert Yanuar Santoso NIM : 612005023 Skripsi ini telah diterima dan disahkan Sebagai salah satu persyaratan guna mencapai SARJANA TEKNIK ELEKTRO dalam Konsentrasi Teknik Elektronika FAKULTAS TEKNIK PROGRAM STUDI TEKNIK ELEKTRO UNIVERSITAS KRISTEN SATYA WACANA SALATIGA Disahkan oleh : Pembimbing I Pembimbing II Handoko, M. Eng Hartanto K. Wardana, S.T, M.T Tgl : ………………… Tgl : ………………… INTISARI Skripsi ini bertujuan menghasilkan pedoman pembelajaran yang dapat digunakan untuk mempelajari bahasa pemrograman fungsional F#. Selain itu juga dibuat pedoman untuk praktikum Artificial Intelligence (AI) sebagai contoh penerapan algoritma AI dengan menggunakan bahasa pemrograman F# (Pada saat skripsi ini dibuat, tidak terdapat buku maupun bahan pembelajaran mengenai bahasa pemrograman fungsional F# yang berbahasa Indonesia.) Pedoman praktikum pembelajaran F# terdiri dari delapan topik dan untuk praktikum AI dibuat enam topik. Untuk pedoman pembelajaran F#, masing-masing topik saling terkait dan terdiri dari tujuan, dasar teori, contoh dan tugas. Tujuan, dasar teori, dan contoh digunakan untuk menjelaskan hasil yang hendak dicapai oleh mahasiswa, membantu memahami dasar materi dan membantu dalam pengerjaan tugas yang diberikan.. Tugas diberikan untuk membantu dalam me-review pengetahuan yang sudah didapat dalam mempelajari pedoman dengan cara praktek. Pengujian dilakukan secara tatap muka dan secara online (lewat internet). Pengujian untuk peserta dengan tatap muka dilakukan untuk delapan topik pedoman pembelajaran F#, sementara untuk pengujian untuk peserta secara online hanya dua topik saja (terkait masalah waktu dari peserta). Dari analisis kuisioner dengan menggunakan metode chi-square didapatkan nilai χ2 (nilai chi-square) dimana χ2 tabel < χ2 hitung yaitu 21,02 < 115,93 sehingga Ha (pernyataan bahwa responden puas) diterima yang artinya responden merasa puas terhadap kualitas pedoman. Dari hasil pengujian peserta praktikum, baik peserta dengan pengajaran tatap muka atau peserta dengan sistem pengajaran online, didapat hasil 85,57 dan 90. i KATA PENGANTAR Segala puji dan syukur penulis berikan kepada Tuhan Yesus yang telah memberikan anugrah-NYA dalam menyelesaikan skripsi ini sebagai syarat kelulusan dari Fakultas Teknik Elektro dan Komputer Universitas Kristen Satya Wacana Salatiga. Penyusunan skripsi ini diharapkan dapat berguna bagi siapa saja yang ingin mempelajari bahasa pemrograman F# maupun yang ingin mengembangkan skripsi ini. Dalam menulis skripsi ini, penulis mendapatkan bantuan dan bimbingan dari berbagai macam pihak. Karena itu penulis mengucapkan terima kasih kepada : 1. Tuhan Yesus Kristus atas hikmat dan pertolongan-NYA sehingga penulis mampu menyelesaikan skripsi ini 2. Keluarga, yang secara tidak langsung telah memberikan dorongan untuk segera menyelesaikan skripsi ini 3. Bapak Handoko M.Eng yang telah memberi topik ini dan membimbing baik dalam penulisan, memberi ide-ide untuk pengujian dan penulisan dan memberikan dorongan moral bagi penulis untuk segera menyelesaikan skripsi ini 4. Bapak Hartanto Kusuma Wardana M.T yang telah membimbing baik dalam penulisan, memberikan pemahaman kepada penulis mengenai Artificial Intelligence dan memberikan dorongan moral bagi penulis untuk mampu menyelesaikan skripsi ini. 5. Teman-teman peserta pengujian tatap muka : Albert, Samuel, Luis, Michael, Boby, Black, Patria, Wawan, BH, Widji, Roby, Yansen dan Arif yang sudah mau meluangkan waktunya dibalik kesibukan masing-masing untuk hadir di lab dan mengikuti pembelajaran F# ii iii 6. Tjiong bersaudara yang sudah membantu dan memberi masukan dalam membuat pedoman sekaligus salah satu peserta pengujian online 7. Bapak Darmawan Utomo M.Eng yang sudah mengijinkan penulis untuk meminjam penulisan milik Stefanus Hermawan Susanto untuk menjadi bahan referensi penulisan skripsi ini 8. Stefanus Hermawan Susanto yang sudah memberi banyak masukan dan menceritakan pengalamannya pada penulis 9. Patria dan Samuel yang sudah meminjamkan printernya untuk mencetak prototipe dan bahan referensi untuk skripsi ini. Thanks brothers! 10. Michael A.S, yang sudah sangat membantu dalam menyelesaikan AI . Tx berat! 11. Om sentral yang sudah membantu mem-fotokopi prototipe skripsi ini dengan cepat sehingga lebih hemat dan tidak merepotkan Patria 12. Teman-teman Living Soul yang membuat penulis dapat melepas stress dalam mengerjakan skripsi ini sekaligus menambah pekerjaan selain skripsi 13. Semua pihak yang berperan dalam kesuksesan skripsi ini yang tidak dapat disebutkan namanya satu per satu. Skripsi ini tentunya masih jauh dari sempurna, maka segala kritik dan saran terhadap skripsi ini akan sangat berharga demi pencapaian yang lebih baik di masa mendatang. Akhir kata, semoga skripsi ini dapat bermanfaat bagi pembaca. Salatiga, November 2011 Penulis Yabert Yanuar Santoso DAFTAR ISI Halaman INTISARI .............................................................................................. KATA PENGANTAR i ..................................................................... ii DAFTAR ISI ............................................................................................. iv DAFTAR GAMBAR ................................................................................ viii DAFTAR TABEL ix BAB I ................................................................................ PENDAHULUAN 1.1 Tujuan ............................................................................... 1 1.2 Latar Belakang Masalah ........................................... 1 1.3 Batasan Masalah ....................................................... 3 1.4 Sistematika Penulisan ....................................................... 4 BAB II DASAR TEORI 2.1 Bahasa Pemrograman Fungsional 2.2 Sejarah F# 2.3 Konsep Utama pada Bahasa Pemrograman Fungsional yang Ada Pada F# 2.4 .............................. 5 ................................................................. 6 2.3.1 Bekerja dengan nilai yang tidak termutasi ... 2.3.2 Bekerja dengan struktur data yang tidak dapat termutasi 2.3.3 λ – Calculus .................................................... 7 9 10 Struktur Bahasa F# 2.4.1 Mengaktifkan lightweight syntax ................ 13 2.4.2 Mengenal scope dan menggunakan let ............. 14 2.4.3 Menulis komentar 15 ............... iv v 2.5 2.4.4 F# Interactive ...................................................... 16 2.4.5 Mengenal type pada F# 16 2.4.6 Menggunakan Visual Studio 2010 untuk membuat kode F# 17 Pengolahan dan Analisis Data 2.5.1 BAB III .............................. Pengumpulan Data ............................................ 21 a. Uji Validitas ........................................... 22 b. Uji Reliabilitas ........................................... 22 2.5.2 Editing Data ....................................................... 23 2.5.3 Koding Data ...................................................... 23 2.5.4 Pengolahan Data .......................................... 23 2.5.5 Analisa dan Interpretasi Data .............................. 24 PERANCANGAN MODUL PRAKTIKUM 3.1 Perancangan modul praktikum ............................. 3.2 Pembahasan modul praktikum F# dasar 26 ................ 27 ............................ 27 3.2.1 Topik 1 – Pengenalan F# 3.2.2 Topik 2 – Struktur Data pada F#, Pattern Matching dan Rekursi ........................................................................... 27 3.2.3 Topik 3 – Record, Discriminated Union dan Pemrograman Imperatif F# 3.3 .................................................... 28 3.2.4 Topik 4 – Memproses Data 3.2.5 Topik 5 – Pemrograman Berorientasi Objek .. 30 3.2.6 Topik 6 – Pemrograman .NET pada F# 30 3.2.7 Topik 7 – Pengolahan Database SQL Server dengan F# 31 3.2.8 Topik 8 – Parallel Programming ............... 31 ........................... 32 Pembahasan modul praktikum AI ............................ .. 29 vi BAB IV 3.3.1 Topik 1 – Breadth First Search ................... 32 3.3.2 Topik 2 – Depth First Search ................... 32 3.3.3 Topik 3 – Greedy-Best First Search ................... 32 3.3.4 Topik 4 – Hill Climbing Search ................... 33 3.3.5 Topik 5 – The Wumpus World .................. 33 3.3.6 Topik 6 – Dynamic Programming .................. 33 PENGUJIAN PEDOMAN 4.1 Pelaksanaan Praktikum ......................................... 34 4.2 Pengujian kepada mahasiswa ......................................... 35 4.3 Pengujian Validitas dan Reliabilitas ............................. 37 4.4 Uji Hipotesis ................................................................. 41 4.5 Analisa Hasil Penilaian 43 BAB V ......................................... KESIMPULAN DAN SARAN 5.1 Kesimpulan ................................................................ 44 5.2 Saran Pengembangan .................................................... 45 DAFTAR PUSTAKA ............................................................... LAMPIRAN A. PEDOMAN F# 1 : PENGENALAN F# ................ LAMPIRAN B. PEDOMAN F# 2 : STRUKTUR DATA PADA F#, PATTERN MATCHING DAN REKURSI ........................... 46 48 60 LAMPIRAN C. PEDOMAN F# 3 : RECORD, DISCRIMINATED UNION DAN PEMROGRAMAN IMPERATIF F# ............... 71 LAMPIRAN D. PEDOMAN F# 4 : MEMPROSES DATA ............... 80 LAMPIRAN E. PEDOMAN F# 5 : PEMROGRAMAN BERORIENTASI OBJEK DENGAN F# .................................................. 98 LAMPIRAN F. PEDOMAN F# 6 : PEMROGRAMAN .NET PADA F# 109 LAMPIRAN G. PEDOMAN F# 7 : PEMROGRAMAN DATABASE SQL SERVER DENGAN F# .................................................. 116 vii LAMPIRAN H. PEDOMAN F# 8 : PARALLEL PROGRAMMING ... 131 LAMPIRAN I. PEDOMAN AI 1 : BREADTH FIRST SEARCH ....... 156 LAMPIRAN J. PEDOMAN AI 2 : DEPTH FIRST SEARCH ....... 161 LAMPIRAN K. PEDOMAN AI 3 : GREEDY BEST-FIRST SEARCH 165 LAMPIRAN L. PEDOMAN AI 4 : HILL CLIMBING SEARCH ....... 169 LAMPIRAN M. PEDOMAN AI 5 : THE WUMPUS WORLD ....... 173 LAMPIRAN N. PEDOMAN AI 6 : DYNAMIC PROGRAMMING ....... 201 LAMPIRAN O. HASIL PENILAIAN .......................................... 205 LAMPIRAN P. TABEL STATISTIK .......................................... 206 LAMPIRAN Q. TUNTUNAN RINGKAS BAHASA F# ..................... 208 DAFTAR GAMBAR Halaman Gambar 2.1. Tampilan awal Visual Studio 2010 ......................................... 18 Gambar 2.2. Tampilan layar create new project ......................................... 18 Gambar 2.3. Tampilan lembar kerja Visual Studio 2010 ............................ 19 Gambar 2.4. Gambar solution explorer 20 Gambar 2.5. Gambar jendela pemilihan library Gambar 2.6. Gambar alur kerja pengumpulan data sampai kepada interpretasi data ................................................... ........................................ 20 ................................................................................................... 21 Gambar 4.1. Pelaksanaan praktikum di ruang BS-10 ........................... 34 Gambar 4.2 Pelaksanaan praktikum di tempat tinggal praktikan .............. 35 viii DAFTAR TABEL Halaman Tabel 2.1. Tabel Tipe dalam F# ........................................................ 17 Tabel 4.1. Pernyataan kuisioner ........................................................ 36 Tabel 4.2. Perhitungan korelasi product moment 37 Tabel 4.3. Perhitungan korelasi product moment item no. 2 Tabel 4.4. .................... ....... 38 Total nilai skor ganjil dan genap .............................. 40 Tabel 4.5. Tingkat kesetujuan responden ............................... 41 Tabel 4.6. Test Chi-Square ....................................................... 42 Tabel 4.7. Nilai rata-rata pezserta praktikum ix ............................... 43