Tag Archives: functional programming

Find real square roots in ML

3 May

Okay, pada kesempatan kali ini kita akan membahas functional programming ML untuk mencari nilai akar real dari sebuah bilangan a. Berikut adalah code-nya, silakan dilihat dan dipelajari:

fun findroot (a, x, acc) =
   let val nextx = (a/x + x) / 2.0
   in if abs (x-nextx) < acc*x then nextx
      else findroot (a, nextx, acc)
   end;

fun sqroot a = findroot (a, 1.0, 1.0E~10);

Kita dapat juga menulis fungsi tersebut dengan menggunakan metode seperti di bawah ini, sehingga terdapat fungsi di dalam fungsi. Check this out!

fun sqroot a =
   let val acc = 1.0E~10
   fun findroot x =
      let val nextx = (a/x + x) / 2.0
      in if abs (x-nextx) < acc*x then nextx
         else findroot nextx
      end
  in findroot 1.0 end;

Ya cukup sekian kodingan untuk menemukan atau find nilai real dari operasi akar atau square roots dari sebuah bilangan a di atas. Semoga dapat memberikan inspirasi bagi semua. Silakan mencoba, terima kasih.

Make Fibonacci Numbers in ML

3 May

Hari ini kita akan mencoba membuat fungsi yang akan mengembalikan fibonacci number atau urutan angka yang merupakan barisan fibonacci. Implementasi fungsi pada ML yang akan dibahas di bawah ini terbagi 2, menjadi fibonacci versi naive dan fibonacci yang lebih cepat atau faster.

Okay, berikut implementasi fibonacci versi naive:

fun fib 0 = 0
   |fib 1 = 1
   |fib n = fib(n-2) + fib(n-1);

Selanjutnya kita akan definisikan fungsi fibonacci yang implementasinya akan lebih cepat daripada fungsi di atas:

fun fib(prev, curr:int) = (curr, prev+curr);

fun fibpair (n) =
   if n=1 then (0,1)
   else fib(fibpair(n-1));

Fungsi di atas akan lebih cepat daripada sebelumnya walaupun kita tidak memakai tail recursive. Silakan mencoba dan berkreasi sendiri dengan fungsi fibonacci yang saya paparkan, terima kasih.

Function to return last element of a list in ML

1 May

Pada kesempatan kali ini, saya akan menjelaskan fungsi yang dapat kita pakai dalam fungsional programming menggunakan Meta Language atau ML. Fungsi ini berfungsi untuk mengembalikan elemen terakhir dari sebuah list. Berikut fungsinya:

fun lastElement [] = raise Empty
   |lastElement [x] = x
   |lastElement (_::xs) = lastElement xs;

Fungsi di atas adalah fungsi yang diharapkan karena akan memaksimumkan penggunaan pattern matching.

Perhatikan bahwa [x] ekuivalen dengan x::[].

Empty merupakan exception standar yang berguna untuk menandakan bahwa tidak ada elemen dalam list, yang juga digunakan oleh fungsi built-in hd dan tl. Boleh juga membuat exception sendiri.

Selain fungsi di atas, kita juga dapat membuat sebuah fungsi lain seperti di bawah ini yang memiliki fungsi yang sama, yaitu untuk mengembalikan elemen terakhir pada sebuah list:

fun lastElement [] = raise Empty
   |lastElement (x::xs) = if null xs then x else lastElement xs;

Perhatikan bahwa null xs ekuivalen dengan xs = [] atau xs = nil.

Okay, cukup sekian pembahasan fungsi untuk me-return atau mengembalikan last element dari sebuah list di functional programming menggunakan Meta Language atau ML. Semoga dapat membantu semuanya…