Tampilkan postingan dengan label LISP. Tampilkan semua postingan
Tampilkan postingan dengan label LISP. Tampilkan semua postingan

Rabu, 16 April 2014

Ebook Lisp : Loving Lisp



0. Mukodimah


Butuh ebook atau referensi tentang LISP ? Coba cek salah satu ebook berikut ini.

Judul : Loving Lisp, or the Savvy Programmer's
Penulis : Mark Watson
Format/kualitas : PDF/Teks


1. Daftar isi


Supaya tidak mendownload kucing dalam karung, saya cantumkan table of content dari buku tersebut


1. INTRODUCTION

1.1 Why did I write this book?
1.2 Free software tools for Common Lisp programming
1.3 How is Lisp different from languages like Java and C++?
1.4 Advantages of working in a Lisp environment
1.5 Getting Started with CLISP

2. THE BASICS OF LISP PROGRAMMING

2.1 Symbols
2.2 Operations on Lists
2.3 Using arrays and vectors
2.4 Using Strings
2.5 Using hash tables
2.6 Using Eval to evaluate Lisp Forms
2.7 Using a text editor to edit Lisp source files
2.8 Recovering from Errors
2.9 Garbage collection
2.10 Loading your Working Environment Quickly

3. DEFINING LISP FUNCTIONS

3.1 Using lambda forms
3.2 Using recursion
3.3 Searching graphs using recursion
3.4 Closures

4. DEFINING COMMON LISP MACROS

4.1 Example macro
4.2 Using the splicing operator
4.3 Using macroexpand-1
5. USING COMMON LISP LOOP MACROS
5.1 dolist
5.2 dotimes
5.3 do
5.4 loop

6. INPUT AND OUTPUT

6.1 The Lisp read and read-line functions
6.2 Lisp printing functions

7. COMMON LISP PACKAGE SYSTEM

8. COMMON LISP OBJECT SYSTEM - CLOS

8.1 Example of using a CLOS class

8.2 Implementation of the HTMLstream class
8.3 Other useful CLOS features

9. NETWORK PROGRAMMING

9.1 An introduction to sockets
9.2 A server example
9.3 A client example
9.4 An Email Client

10. EXAMPLE - READING USENET NEWS WITHOUT THE
SPAM

10.1 Understanding the NNTP protocol
10.2 A Lisp library to retrieve Usenet articles
10.3 A Lisp library for storing Usenet articles
10.4 Strategies for filtering out SPAM
10.5 Generating HTML output for a list of Usenet news groups

11. EXAMPLE - A COMMON LISP WEB APPLICATION
SERVER

INDEX


2. Catatan


Silahkan download pada link berikut ini, dan semoga bermanfaat :

link unduh : http://goo.gl/rPrlMu

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

Kamis, 01 November 2012

Latihan LISP

Berikut ini merupakan ilustrasi cara LISP bekerja. Pertama, LISP akan membaca dari kiri sampai ujung terkanan. Kecuali jika terdapat eror, maka LISP akan berhenti sebelum sampai ke kanan. Kedua, Lisp akan mengeksekusinya dari kanan menuju ke kiri. Mungkin daripada balik lagi ke kiri bikin cape saja..... mendingan sikat saja dari kanan. :)


>( cons ( first '( a s k ))( cons 'juga ( rest '( a s k ))))
>( cons ( first '( a s k ))( cons 'juga '( s k )))
>( cons ( first '( a s k ))'( juga s k ))
>( cons '( a )'( juga s k ))
>( a juga s k )


Analogi lain seperti :


(2+4)*(5+6*3)    =(2+4)*(5+6*3)
        =(2+4)*(5+18)
        =(2+4)*(23)
        =(6)*(23)
        =138

Latihan LISP lanjutan posting kemarin.

Selain dengan fungsi FIRST dan REST, hasil yang sama juga bisa diperoleh dengan mengunakan fungsi CAR dan CDR. Entah kenapa saya diajarinya malah first & rest terlebih dahulu.

Baik, untuk latihan lisp kali ini, lakukan operasi CAR & CDR pada list - list berikut ini :

1. ( a b c )
2. ( x y z ( a b c ))
3. bakso
4. (( merah )(( putih )))
5. ( car ( car x ))
    jika x = list nomor 4

Sekaligus latihan fungsi CONS, biar rame.

Buatlah formula untuk membentuk list - list berikut ini dengan fungsi CONS :

1. ( aku ( sayang kamu ))
2. ( aku ( sayang ) kamu )
3. (( aku sayang ) kamu )
4. (( aku sayang kamu ))
5. ( aku sayang kamu )

jika :

    a. aku
    b. sayang
    c. kamu
    d. ( ) / NIL

    Contoh :
       
        ( cons a ( cons b ( cons c NIL ))) ........... <== bentuk formula yang diinginkan.
    untuk :
        ( cons 'aku ( cons 'sayang ( cons 'kamu NIL))) ..... eksekusi pada interpreter
   

Seperti game asah otak bukan ? Mari berlatih bersama....! jika terdapat hal yang salah silahkan hubungi saya :)

Contoh lain :
        ( cons 'a( cons ( cons 'b ( cons 'c NIL )) NIL ))

        Jika nilai - nilainya disubstitusi maka :
   
        (cons 'aku(cons(cons 'sayang(cons 'kamu NIL))NIL))

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, 28 September 2012

Fungsi LOAD pada LISP

0. Mukodimah 

Melanjutkan pelajaran LISP yang tertunda sangat lama akibat tergeser berbagai macam kesibukan. Topik saat ini adalah load file. Pada ulasan terdahulu saya menggunakan REPL alias langsung menulis contoh program sederhana pada si LISP nya sendiri yang mungkin hilang saat si LISP-nya dimatikan. Nah cara lainya adalah kita menulisnya pada text editor dan menyimpanya untuk kita load saat kita inginkan.  

1. Menulis fungsi 

Kita coba sebuah fungsi sederhana (defun luas (L) (* L L)) Bila tidak suka dengan fungsi ini, silahkan modifikasi sesuai keinginan anda. Kebetulan saya menggunakan Notepad++, kemudian simpan dengan extensi .lisp. Dalam contoh saya menyimpan dengan nama file luas.lisp dan simpan pada direktori lisp anda, gampangnya simpan bareng sama folder lisp exe-nya [ pada windows ].

[Notepad++] 

2. Mainkan 

Hidupkan Lisp kemudian load / panggil program yang sudah kita buat tadi. (load "luas") Hasilnya kemungkinan seperti ilustrasi di bawah ini.
[REPL] 

kemudian kita tes :
>(luas 5)
>25
>(luas 9)
>81
>(luas 123456789123456789)

> ? silahkan cari sendiri.  

3. Selanjutnya.

Jadi sekarang kita bisa menyimpan berbagai program kreasi kita dan di load kembali saat kita membutuhkanya. Seperti pepatah bilang bahwa ilham kreasi bisa datang kapan saja...... Ini bukan tutorial, hanya sebagai catatan bagi saya jika suatu saat nanti lupa. :)

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.

Related Posts Plugin for WordPress, Blogger...