This is from the perspective of an aerospace engineer who passed through python several years ago on the way to lisp. Futhermore, this is a 2 glass of wine response.
Nota Bene: All references to lisp in this response imply common lisp. Mark Tarver wrote: > How do you compare Python to Lisp? What specific advantages do you > think that one has over the other? Way back, my initial motivation for learning python was the desire for something to post-process data files with a cleaner syntax than perl. It did that in spades. Despite having taken a C++ course in college, it wasn't until I started using python that I grokked concepts of object orientation. The aforementioned course spent too much time on basic concepts. I also envisioned being able to rapidly prototype things in python, then migrate them to C for performance. Long term, that was going to be the value of python, rapid prototype->C for performance. After writing a C interface for python to an engineering analysis code, I realized that there was nothing rapid about prototyping in python then migrating to C. This was also a period of time where there was some schizophrenia concerning numpy versus numeric python. I know this has been hashed out now, but at the time it was a distraction from the development of the library and I lost patience. So, I began searching for alternatives. Spent a couple years with a language that requires everything to be an object. Can someone hand me a hammer, I have a round peg here and a square hole there. Didn't have good numeric support, but based on other perceived advantages, I had hashed out an object system that would have provided numeric support. As I'm implementing the numeric stuff, I'm getting very annoyed with changes in the language that are requiring redesign of my objects. Plus, performance, while not bad, is not the best. The work required starts to outway the benefits, so here I go again, searching for the one language to rule them all. That's when I seriously consider lisp. At this point, if lisp doesn't work out, I'm giving up and going back to fortran, never to look at another language again. Ever. So, six months ago, I start digging into lisp. Hmm, lisp promotes functional programming, but you can do imperative if you really want to, or objective, or aspect, or your own. What about types? Well, to quote Yogi Berra, "In lisp, types are not required until they are required." This is great, I can quickly thrash out some code, profile, correct the algorithm, profile, add types, bam! Good performance. Looking over CMUCL/SBCL, really good numeric performance. Playing with code that is 30 years old, still runs, nice. Forced to learn emacs, why was I using vi again? In the correct settings, slime can be fun. Emacs+SBCL is one setting, I'll let you think of the other. What the hell are closures? Oh, yeah, now I get it, functions with state, I can use that in simulations with state vectors, very intuitive. And macros? Well, I don't need a domain specific language, yet, but using macros to build closures with multiple functions and shoving as much computation into the compilation stage as possible makes for very fast iteration over ODE's. Now I'm simultaneously iterating over 3 variations of an ODE in less time than iterating over 1 ODE in the previous one size fits all language. Code is data is code. I know, a tired old cliche. But for an engineer who wastes too much time data processing and not enough time analyzing/understanding said data, this is very powerful and provides a warm fuzzy feeling. Yet again, that could be the wine. > Note I'm not a Python person and I have no axes to grind here. This is > just a question for my general education. I've been writing code for engineering solutions for 15 years in various languages. I've gained more insight into coding in the last 6 months then in the previous 15 years. Since lisp allows you to employ any and every programming technique, it actually requires you to understand the techniques well enough to apply them when appropriate. I still respect python if for no other reason than I learned concepts of object orientation with it, but I don't consider for my coding. You should study lisp for at least a year, use it for some decent size projects. At the end of the day, even if you decide not to continue using it, you will be a much better coder. My bet, though, is that if you use it for a year, you won't want to use anything else. Don't be deterred by the parens or the prefix notation. You will have to rewire your brain to read lisp code, but the effort is worth it. The parens disappear and there is an elegance and simplicity to prefix notation that can't be matched by infix. Time for some more wine. Cheers, Tom -- http://mail.python.org/mailman/listinfo/python-list