Wednesday, June 23, 2004

Learning Lisp

I've been learning Lisp - after all, it's not as if I have anything else to do. It's very different to any other programming language I've learnt, and in a way it's very cool. I especially like the feature that the language itself can be used to modify the language, but I haven't really got to the stage where I can make use of that yet. Today I wrote a program:

(defun countdown (&rest args)
  (let ((target (apply #'encode-universal-time args))
        (left))
    (do ((finished nil)) (finished)
        (sleep 1)
        (setf left (- target (get-universal-time)))
        (if (< left 0)
            (setf finished t)
          (format t "~a:~a:~a~%"
                  (floor (/ left 3600))
                  (floor (/ (mod left 3600) 60))
                  (mod left 60))))))

I've been finding ANSI Common Lisp by Paul Graham very handy (once Amazon finally decided to deliver it), and I've been using SBCL as my compiler.

Update: The history of Lisp, for anyone who's interested.

5 comments:

Lisa said...

"the language itself can be used to modify the language" - am i mixed up, or can you do that with C/C++ too?

Gonna learn C++ over the summer ;) and brainfuck, ehehehe.

Peter said...

The difference between the macro capabilities in C++ and those in Lisp are like the difference between a horse-drawn cart and a Ferrari. I haven't been learning Lisp long enough to give a good example, but you get the idea.

Lisa said...

so how come i've heard more about c++ than i have about lisp? o.o

Peter said...

Broadly generalizing, programming languages come in two families nowadays: the 'C family' (C, C++, Java, PHP, C# etc) and the 'Lisp family' (Lisp, Scheme, Smalltalk). Once people get into programming in one style, they prefer to continue programming in that style, so people who start programming in C-like languages stay with them. And newbie programmers tend to be put off by Lisp's syntax (actually very simple - it just looks complicated).

Lisa said...

I still make it my ambition to learn as many programming languages as I possibly can... maybe I'll give Lisp a shot to defy what you just said. Although apparently you have already defied it.