Tampilkan postingan dengan label Clisp. Tampilkan semua postingan
Tampilkan postingan dengan label Clisp. Tampilkan semua postingan

Kamis, 27 Desember 2012

List & plist pada Common Lisp


1. List



List adalah sebuah daftar dari data - data.
Misalnya : Oncom, 500gr, 2500.
Bayangkan sebuah tabel pada excel dengan row A sebagai judul tabel dan datanya dimulai pada row A2.



contoh list

Contoh :

>(list Oncom 500gr 2500)
(Oncom 500gr 2500)




2. plist



plist merupakan kependekan dari property list yang merupakan cita rasa lain dari metode membentuk sebuah list. Lucunya perintah yang digunakan sama saja dengan membentuk list biasa yaitu dengan LIST.
Perhatikan contoh berikut :



> (list :nama p3m4la5 :email abc@gmail.com :hobi melamun)
(:nama p3m4la5 :email abc@gmail.com :hobi melamun)

 

Jika sudah melihat perbedaanya, kemudian apa gunanya ?

Hal yang membuat plist lebih keren daripada list biasa adalah fungsi GETF. Perhatikan lagi contoh dibawah ini :

> (getf (list :nama "p3m4la5" :email "abc@gmail.com" :hobi "melamun") :email)
"abc@gmail.com"


bandingkan dengan cara mengakses list dengan metode pertama :

>(car (cdr '(oncom 500gr 2500)))
500GR

Kamis, 08 November 2012

ROT13 dengan LISP

0. Mukodimah

Beberapa hari yang lalu saya iseng ngubrek - ngubrek arsip forum LISP. Dari sekian puluh ribu arsip saya menemukan hal yang menarik. Disebut menarik karena ini seperti game permainan kata tapi tidak terlalu sulit untuk ditela'ah.

Apakah itu ? Ialah ROT13.

Sekedar mengingatkan, bahwa ROT13 merupakan varian dari Caesar Cipher.

Misalnnya pada ilustrasi diatas terdapat sebuah piringan / roda caesar. Perputaran bagian dalam akan menghasilkan pasangan unik antara karakter bagian dalam dengan bagian luar. Nah pada ROT13 pergeseran dibuat sebanyak 13 karakter. Sehingga karakter A akan berpasangan dengan karakter N. Sesuai dengan rumus { Cipher = Plaintext + K } dimana K adalah pergeseran karakter.

Ringkasnya huruf A akan disandikan menjadi huruf N. Untuk permainan pramuka tingkat SD pasti akan menarik...... Contoh penerapan :

"Nu grealngn Nxh tnagrat frxnyv, fnlnat benat Ynva gvqnx gnh"


1. The code

Dari sekian banyak kode di arsip yang saya temukan, saya akan mengutip satu saja. Ingat, pepatah bilang banyak cara untuk menuju ke Roma. Kode ini miliknya Tiarnán Ó Corráin. Inilah kode / formula yang dimaksud :

(defconstant alphabet "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ")

(defun rot13/char (char)
  (if (alpha-char-p char)
      (char alphabet
            (mod (+ (position char alphabet) 26)
                 52))
      char))

(defun rot13 (string)
  (map 'string #'rot13/char string))

Belajar LISP paling dasar memang membosankan, ini merupakan contoh lain yang bisa dilakukan dengan bahasa pemrograman LISP supaya lebih menarik. Jadi inilah ROT13 dengan LISP.

Lihat bagian (mod (+ (position char alphabet) 26) 52)) dengan seksama.


2. Testing

Sebenarnya kalimat "Nu grealngn Nxh tnagrat frxnyv, fnlnat benat Ynva gvqnx gnh" diatas dihasilkan dengan kode ppada poin satu diatas. Tetapi sebagai prosedur tetap ada baiknya saya tampilkan sebuah ilustrasi seperti di bawah ini :




Nah sekarang yang menjadi persoalan bagaimana cara untuk memecahkan sandi ROT13 ini ? Pasti anda tau dong.... :)

Ya memang dimana ada proses enkripsi maka disitu harus ada proses deskripsi. Lebih jauh, kedua proses ini akan bertanding siapa yang lebih unggul sampai akhirnya manusia bosan sendiri. Tanpa teknik deskripsi [ yang tepat ] jangan harap anda bisa mengekstrak password windows XP teman atau bos anda hahaha

Rabu, 17 Oktober 2012

Fungsi FIRST dan REST


0. Mukodimah

Setelah oprek - oprek gambar dengan inkscape, mari kita lanjutkan pelajaran LISP. Belajar Lisp secara perlahan adalah gaya saya karena otak saya kurang encer :)

Banyak fungsi yang bisa digunakan untuk mengakses list. Tetapi fungsi yang akan kita pelajari saat ini adalah

* first
* rest

Sayang sekali fungsi ini mungkin tidak ada pada Autocad, setidaknya pada versi 2007. Jadi sebaiknya gunakan GNU Common LISP. Standarnya sih fungsi diatas ditulis dengan huruf kapital, hanya saja saya sedang malas....

Contoh hasil pada Autocad :

Command: ( first '( z x c ))
; error: no function definition: FIRST


Syntax :     ( first <list>)
                 ( rest <list>)

1. Percobaan

Buka Clisp-mu dan mainkan contoh berikut :

>  ( first ( x y z ))
*** - EVAL : undefined function X

Hal tersebut karena Lisp tidak mengenali X, dan menginformasikan bahwa X belum didefinisikan. Bandingkan dengan contoh berikut :

>  ( first ( quote ( x y z ))
> X

Inilah asal muasal tanda ( ' ) pada LISP. Karena umumnya kita malas untuk mengetik kata - kata panjang maka disingkat dengan tanda ( ' ). Ini dinamakan fungsi quote.



> ( first '( x y z ))
> X
> ( rest '( x y z ))
> ( Y Z )

Sudah mendapat gambaran ? Benar sekali, first akan menghasilkan elemen pertama dari sebuah list. Sedangkan rest membuang elemen pertama pada sebuah list.

2. Latihan

2.1    > ( first '( aku sayang kamu ))
         > AKU

2.2    > ( rest '( aku sayang kamu ))
         > ( SAYANG KAMU )

2.3    > ( rest ( rest '( aku sayang kamu )))
         > ( KAMU )

2.4    > ( first (rest '( aku sayang kamu )))
         > ( SAYANG )

2.5     > ( first ( rest ( rest '( aku sayang kamu ))))
          > KAMU

3. Latihan lanjutan

Umpamanya kita mempunyai sebuah list yang berisikan aku sayang kamu. Kemudian kita berubah pikiran dan ingin menyisipkan juga setelah aku sehingga hasilnya adalah aku juga sayang kamu.

( aku sayang kamu ) menjadi ( aku juga sayang kamu )

Berikut contoh yang saya kerjakan :

( cons ( first '( aku sayang kamu ))( cons 'juga ( rest '( aku sayang kamu ))))

Lebih mirip sebuah permainan susun kata bukan ? :)

Yep, memang demikianlah adanya. Saya yakin anda bisa membuat formula yang labih efisien daripada contoh yang saya berikan. Itulah salah satu contoh permainan kata pada LISP dengan fungsi - fungsi sederhana.

4. CMIIW

Semua ini adalah catatan pelajaran saya, sangat besar kemungkinan salah. Karena itu mohon koreksi dari anda.

Jumat, 12 Oktober 2012

Fungsi cons pada LISP


0. Syntax

            ( cons '<ekspresi> '<list> )

Cons pada lisp ini berfungsi untuk menambahkan ekspresi pada list setelahnya. Ingat format penulisannya harus ekspresi dulu kemudian diikuti list-nya.

1. Contoh

Buka Lisp mu dan ketikan pada promt :

> ( cons 'saya '( sangat lapar ))
> ( SAYA SANGAT LAPAR)
> 
> ( cons 'x '(y z))
> ( X Y Z )
> 
> ( cons 'hello NIL)
> ( HELLO )
>

2. Latihan

a. ( cons 'alamat (palsu))
b. ( cons alamat '(palsu))

Apa hasil dari kedua latihan tadi ?

Selasa, 03 April 2012

Fungsi defun LISP

0. Mukodimah

Bila sebelumnya kita mengulas fungsi dasar LISP, kita sekarang mencoba mendefinisikan sesuatu. Lebih tepatnya cara mendefinisikan sebuah fungsi baru.

Umumnya LISP memiliki tradisi untuk membuat fungsi - fungsi baru berdasarkan fungsi lama. Bingung ? Jangan khawatir, bukan anda yang kurang pintar tetapi bicara saya yang berantakan.

1. Metode

Untuk mendefinisikan fungsi baru, kita gunakan perintah defun dengan rumus kira - kira sebagai berikut :

(defun definisi-baru (x) ( badan-fungsi )

2. Contoh

(defun pangkat-2 (x) (* x x ))

Kira - kira dibaca seperti ini : Pendefinisian fungsi pangkat dua dari x dengan rumus x kali x.

Atau mungkin dibaca : Pangkat dua [ dari x ] samadengan x dikalikan dengan dirinya sendiri.

Atau begini : Fx2 = x * x

Pangkat-2 => fungsi yang akan dibuat [ ganti saja dengan yang lebih keren ]

(x) ==> nilai yang akan dicari

3. Aplikasi

>(pangkat-2 5)

>25

"pangkat-2" merupakan fungsi yang baru dibuat dan 5 merupakan nilai yang akan dicari kuadratnya.

4. Penutup

Pada dasarnya lisp merupakan koleksi dari fungsi - fungsi. Sebuah paket lisp berisikan banyak fungsi yang sering disebut fungsi dasar, sebenarnya fung si dasar tersebut tidak berbeda dengan fungsi yang anda buat sendiri. Dan jika diarasa ada fungsi yang kurang, anda dengan leluasa bisa menulis fungsi yang anda butuhkan.

Senin, 30 Januari 2012

Belajar LISP yuk !!


1. Mukodimah


Lisp merupakan salah astu bahasa pemrograman tertua yang masih dipakai hingga sekarang. Mungkin ada anggapan bahwa Lisp adalah AI ( kecerdasan buatan) dan AI adalah LISP. Konon hal tersebut merupakan insiden ketidak sengajaan, yaitu keduanya “diciptakan” oleh orang yang sama yaitu John McCarthy. Dalam kata pengantar sebuah bukunya ( LISP I PROGRAMMER’S MANUAL – March,1 1960 - MIT) yang pernah saya unduh entah dari mana :

LISP I is a programming system for the IBM 704 for computing with symbolic expression. It has benn used for symbolic calculations in differential and integral calculus, electric circuit theory, mathematical logic and artificial intelligence.

Dengan sekilas membaca paragraf tersebut, kita bias tahu bahwa LISP sangat matematika atau setidaknya mewarisi kematematikaanya dengan sangat kuat.Sebagai sebuah bahasa, LISP berkembang menjadi banyak dialek. Mungkin hal tersebut dikarenakan sifat LISP sebagai “programmable programming language”. Diantara beberapa dialek yang berkembang sampat sekarang adalah CLISP ( Common LISP ), Scheme dan Haskell ( ??). Tetapi bagi orang Indonesia mungkin lebih mengenal Visuallisp atau Autolisp yang dibundel bersama aplikasi Autocad.

Yang akan kita bahas adalah dasarnya saja karena saya bukan seorang lisper bersertifikat alias masih dalam taraf belajar. Mudah – mudahan bermanfaat bagi anda orang Indonesia.

2. Teori


Kita akan mempelajari fungsi dasar ( kadang operator disebut fungsi ). Apa itu fungsi dasar ? singkatnya ya fungsi bawaan yang sudah siap digunakan. Dalam Lisp ceritanya fungsi atau operator dasar ini dibuat jadi tiga kelompok yaitu :

      1.       Operator aritmatik
       Operator ini terdiri dari :
·         Tambah (+)
·         Kurang (-)
·         Kali (*)
·         Bagi (/)
·         Modulo
·         Akar (sqrt) dst
Disini intinya adalah operan-nya numerik dan hasilnya numerik juga.
      2.       Operator relasional
      3.       Operator logika
Sesuai kapasitas saya, kita bahasa saja beberapa anggota dari kelompok pertama alias operator aritmatika.  Sebelum masuk , kita lihat dulu deh perbedaan penulisan notasi pada matematika dan notasi LISP.

         a.       4 + 2
         b.      (+ 4  2)
         c.       5 x 2
         d.      (* 5 2)
         e.      6 : 3
         f.        (/ 6 3)
         g.       8 – 2
         h.      (- 8 2)

Notasi a, c, e & g merupakan notasi umum dalam matematika ( setidaknya yang saya tahu hehe... ) sedangakan notasi b, d, f dan h merupakan notasi LISP. 

Sudah tahu perbedaanya ?

·         Notasi Lisp diawali kurung buka dan diakhiri kurung tutup
·         Operator ditulis sebelum operan – operannya dan dipisahkan dengan spasi.

Dengan melihat contoh diatas mungkin kita akan menarik kesimpulan yang berujung pada syntax umum yaitu :

( <operator>  <operan>  <operan> )

Teorinya cukup ini dulu deh.... Anda tidak perlu jenius untuk memahaminya. Jika nada sangat pintar tentu membaca artikel ini hanya membuang – buang waktu saja.

3. Praktek yuk!


Setelah anda membaca sub teori ( cukup membaca saja, tidak perlu banyak berfikir hehehe ) ada baiknya kita praktek. Untuk itu diperlukan interpreter CLISP atau konsol pada Autocad atau interpreter alami yakni OTAK anda alias percobaan imajiner. 

Baik, cobalah menyelesaikan test mudah ini :

  1. (/ 10  6)
  2. (+ (* 2  3)4)
  3. Tulislah notasi luas persegi panjang
  4. Tulislah notasi volume kubus
  5. (+  4  3  2  1)
  6. (+ (*  4(+  5  4))(-  8 (*  3  2)))
Sekarang bandingkan contoh no 1 dengan :

(/  10.0  6)
(/  10  6.0)

Semoga bermanfaat, bila ada pertanyaan silahkan berkomentar untuk kita diskusikan. Ingat saya bukan pakar LISP, hanya pengagum para lisper saja.

Kamis, 12 Januari 2012

Install GNU CLISP pada PUPPY LINUX

Install CLISP pada WARY 5


0. Apa itu CLISP ?
1. OS
2. Bahan bahan yg diperlukan
3. Test
4. Selanjutya




0. Apa itu CLISP


Tentu saja bagian ini bukan untuk membahas detil. Setidaknya saya akan memberikan link - link tertentu. CLISP merupakan kependekan dari Common LISP.
http://en.wikipedia.org/wiki/CLISP
http://www.clisp.org

1. OS

Seperti judulnya, OS yang digunakan saat percobaan ini adalah Wary 5.1.4.1  dengan kernel Linux 2.6.32-smp(i686). Saat akan menginstall CLISP, si OS nya ini sudah dilengkapi oleh devxxx.sfs-nya.

Baik, cukup kali perkenalan OS nya. kita lanjutkan ke :


2. Bahan bahan yg diperlukan


Atas petunjuk dari http://www.clisp.org dan karena kebiasaan saya lebih seneng dengan paket debian, maka tibalah pada halaman http://packages.debian.org/squeeze/clisp.
Baiklah, setelah coba - coba di konsol maka yg diperlukan adalah ( pas ngetest sih sesuai urutan) :
* clisp_2.48-3_i386.deb
*libdb4.8_4.8.30-2_i386.deb
*libffcall1_1.10+cvs20100619-2_i386.deb
*libsigsegv0_2.5.3_i386.deb


3. Test

Seperti dikatakan tadi, saya hanya coba - coba. Meski dikonsol semua “bahan - bahan” telah komplit tetap saja ditemukan ke-eroran. Selidik punya selidik, ternyata terdapat missing shortcut pada direktori /usr/lib/clisp-2.438/base yakni lispinit.mem.

Atas petunjuk ini dimulai lagi penelusuran yang ternyata membawa ke direktori /usr/lib/clisp-2.48/full. Ternyata memang disana tidak ada file bernama lispinit.mem justru yang ada adalah file lispinit-orig.mem.
Iseng - iseng saya kopi saja file tersebut ( masih pada direktori yang sama) kemudian direname sehingga menjadi lispinit.mem. Coba lagi di konsol dan ... wew.... inilah skrinsutnya :




Sudah berhasilkah ? mari kita coba dengan operasi matematika standar 2 pangkat 3 yang seharusnya menghasilkan 8.
(expt 2 8)
Hasilnya : 8..... ternayat cocok. Nah kita test dngan iseng berapa sih kalau 2 pangkat misalnya 4568 ? kita cek mampu ngitung kah ?



Ternyata bisa, kalau dibaca terbilang jadi berapa tuh ?

4. Selanjutya

Now what ? ya jika anda suka dengan LISP programming style mungkin anda perlu mengunjungi referensi ini :

http://www.gigamonkeys.com/book
Related Posts Plugin for WordPress, Blogger...