(LOOP (FORMAT T "~%Hello Metafilter"))
April 4, 2007 10:35 AM   Subscribe

Do you want to learn Lisp? The complete text of Harold Abelson's and Gerald Sussman's Structure and Interpretation of Computer Programs (2nd ed. 1996) is online with a bunch of additional resources. There is also a complete series of lectures based on the first edition given in 1986.
posted by Roger Dodger (64 comments total) 30 users marked this as a favorite
 
I plan on diving in as soon as exams are over.
posted by Roger Dodger at 10:35 AM on April 4, 2007


The The Little Schemer is a really fun way to explore functional programming in a LISP dialect called scheme. It starts at an incredibly simple level, and concludes by implementing a scheme interpeter in scheme. Awesome.

Along with a free copy of DrScheme its great for anyone who likes logic puzzles, even if they've never programmed anything before.
posted by belling at 10:48 AM on April 4, 2007 [1 favorite]


The Little Schemer was my constant companion during my AI class. It's a good book. Could use a little polish though.

Learning LISP is an interesting exercise in logic, but a waste of time if you want to write programs that are actually useful.

I'll take LISP over Prolog though.
posted by jeffamaphone at 10:53 AM on April 4, 2007


Please stop posting links this instant. I have no time to (again) try to pick up Lisp or Scheme.
posted by DU at 10:55 AM on April 4, 2007


Lisp is the only thing that carried me through advanced computing classes. It wasn't the language, per se, it was the lessons it taught me. Whenever I got stock on a particularly difficult problem, I'd try and code it in Lisp. The resulting logic hoops through which I had to jump could be easily adapted back into whatever language I was using for the class.
posted by thanotopsis at 11:03 AM on April 4, 2007


I'll take LISP over Prolog though.

Faint praise. I could say the same for scabies.
posted by cortex at 11:04 AM on April 4, 2007 [3 favorites]


I could say the same for scabies.

LISP over scabies, or scabies over Prolog?
posted by spacewrench at 11:08 AM on April 4, 2007


Learning LISP is an interesting exercise in logic, but a waste of time if you want to write programs that are actually useful.

What a stupid thing to say. How does your foot taste?

Are you familiar with orbitz.com? Written in Lisp. According to the authors, ITA software, who employ quite a few Lisp programmers, their software would be difficult to impossible to write in anything else.

That's just one example. There are many, many others. You can start here if you want to learn more.
posted by e40 at 11:12 AM on April 4, 2007


LISP over scabies, or scabies over Prolog?

Let's just call it a continuum.

Another thing in LISP's favor, even if you're going to make the argument that it's an academic language, is that it's a genuine men-from-the-boys language. Any worthy CS will get LISP with some amount of effort; anyone who just can't ought to get out of the field doublequick, for their sake and the sake of their future employers and endusers.
posted by cortex at 11:16 AM on April 4, 2007


Do you want to learn Lisp?

Yeth.
posted by ZenMasterThis at 11:18 AM on April 4, 2007 [6 favorites]


LISP makes baby jesus cry.))))))))
posted by chrisamiller at 11:20 AM on April 4, 2007


"Common Lisp: A Gentle Introduction to Symbolic Computation" is also a free download and highly recommended.
posted by bhnyc at 11:24 AM on April 4, 2007


Hilarious. I thought it was some kind of recursive joke.
posted by Roger Dodger at 11:28 AM on April 4, 2007


My work library doesn't have Little Schemer, but it appears that LS is just the fourth edition of Little Lisper, which they did have. The format looked like it really, really sucks, basically being FAQ-style for 200 pages. *whew*
posted by DU at 11:28 AM on April 4, 2007


I enjoyed solving the programming puzzles in my LISP class, but I would never use it for a programming project. Recursive thinking is (usually) great for developing interesting and efficient algorithms, but I've found it fairly terrible for application programming. For those who love it, more power to them.
posted by demiurge at 11:31 AM on April 4, 2007


Learning LISP is an interesting exercise in logic, but a waste of time if you want to write programs that are actually useful.

No. Read Beating the averages, or maybe Steve Yegge's essays.

Even if you never touch a line of lisp (or haskell, or ruby, or erlang, etc...) in production, it will make you a better programmer in whatever language you do work with.
posted by rsanheim at 11:34 AM on April 4, 2007


What a stupid thing to say. How does your foot taste?

Pop quiz: Create a lisp program to download an RSS feed off the Internet, parse through the text, and upload this data to an SQL database.

Lisp doesn't have the library backing of modern languages, and most of the time is actively hostile to the environment it runs in.

I love lispy data/code structures as much as anyone. It is concise and expressive as hell. But a language without libraries is like a car engine without a body. Runs well; doesn't get anywhere.

And Paul Graham needs to shutup about lisp or release arc already.

And at the end of the day, Worse is better
posted by zabuni at 11:48 AM on April 4, 2007 [2 favorites]


Recursive thinking is (usually) great for developing interesting and efficient algorithms, but I've found it fairly terrible for application programming. For those who love it, more power to them.

Wow, more wisdom from non-Lisp programmers. I've programmed in Lisp for 25 years (and I've been paid for doing so the entire time). 99% of the programs I write are not recursive. Actually, make that 99.99%.

It never ceases to amaze me what people will say about things they know little about.
posted by e40 at 11:50 AM on April 4, 2007


Pop quiz: Create a lisp program to download an RSS feed off the Internet, parse through the text, and upload this data to an SQL database.

XML parsers abound. For example, this one. The guy in the next office wrote an RSS feed crawler that amassed millions of feeds, which he put into an object database. It was a few pages of code.

and most of the time is actively hostile to the environment it runs in.

I have no idea what this means, but it is contrary to my experience.
posted by e40 at 11:55 AM on April 4, 2007


Are you familiar with orbitz.com? Written in Lisp.

Funny. My friend who works @ orbits talks a lot about it being a Java shop but she's never mentioned Lisp. What do they use Lisp for there?
posted by incongruity at 11:56 AM on April 4, 2007


Yay! Language wars!

SICP has been on my list of things to get through for a while, the very first lecture was more informative than the first year of CS courses. After having fiddled with Ruby and Javascript, I get so frustrated with languages that don't have first-order anonymous functions and proper chaining. *cough*PHP*cough*.

But, LISP really doesn't have the breadth of libraries that the big, famous languages do. That mythical RSS-parser-to-database function is ~10 lines in Ruby. I know, I wrote one.
posted by Skorgu at 12:00 PM on April 4, 2007


who employ quite a few Lisp programmers, their software would be difficult to impossible to write in anything else.

That seems implausible. At some point, everything written in LISP is turned into assembler. Isn't it true that any assembly language program can be written in any mainstream computer language (like C?). Therefore, can't all programs in any language be written in any other language?
posted by Pastabagel at 12:00 PM on April 4, 2007


...can't all programs in any language be written in any other language?

Theoretically. In practice, some languages make certain tasks much, much easier than others.

That said, Lisps main claim to ease-of-use is that you can pass program fragments as data. This is a common feature in scripting languages nowadays (Tcl and Python both support it, as well as others), so "difficult to impossible to write in anything else" needs to be backed up by examples that exclude these modern languages.
posted by DU at 12:03 PM on April 4, 2007


Funny. My friend who works @ orbits talks a lot about it being a Java shop but she's never mentioned Lisp. What do they use Lisp for there?

The backend is written in Lisp. The part that actually calculates the fares. If you go here and search for lisp you'll see they have 5 open positions.

And, to be precise, ITA software is the provider of the software that runs Orbitz.com.
posted by e40 at 12:07 PM on April 4, 2007


I'll take LISP over Prolog though.

Having to write an entire application in Prolog would probably be trying. Prolog is great for some problem domains, though. In particular there are times I find myself wishing I could write queries in Prolog rather than SQL.

(You actually can, if you're making the platform decisions, anway, but the extra hoops generally aren't worth it.)
posted by weston at 12:11 PM on April 4, 2007


Wow, more wisdom from non-Lisp programmers. I've programmed in Lisp for 25 years (and I've been paid for doing so the entire time). 99% of the programs I write are not recursive. Actually, make that 99.99%.

Good for you. I was just relating my experience that writing more recursively structured algorithms was easier for me in LISP than doing iterative stuff. I know that Common LISP has more iterative facilities than Scheme, for example, but I never liked the syntax.

I may be a non-LISP programmer, but I feel like I've given it enough of a chance to at least express what I like and don't like about the language.
posted by demiurge at 12:12 PM on April 4, 2007


That said, Lisps main claim to ease-of-use is that you can pass program fragments as data. This is a common feature in scripting languages nowadays (Tcl and Python both support it, as well as others), so "difficult to impossible to write in anything else" needs to be backed up by examples that exclude these modern languages.

What sets Lisp apart from all other languages is that program and data have the same form. (this is a list) is both data and program. The function to read data is the same that can be used to read a program. This seemingly unusual fact leads to one stunningly important thing: the macro facility in Lisp is light years beyond anything in any other language. In fact, it allows Lisp programs to be cloaked in macrology that can transform them into domain specific languages. The first DSL I'm aware of was used in chip circuit design at UCB circa 1981. It was called Slang. It was used to make the first RISC proccessor, one that went on to become the SPARC processor at Sun.
posted by e40 at 12:13 PM on April 4, 2007


What I think is going to make LISP (or an analogue) really take off is Java. No, really.

There are two projects right now to take Lisp-ish code (Ruby) and allow it to communicate in a natural way with Java(and Mono) libraries. Soon, the bytecode compilers will be useful, and the distinction between Ruby and Java will blur. Parrot(perl6) is the same thing with different names.

When all languages can be bytecode compiled in a way that allows them to interoperate and share libraries, all of a sudden anybody can write a language that can use any library for any language. Now LISP has the uber-powerful syntax/macros/code-as-data that it always had, and access to lots of boring, procedural stuff that's a pain in the butt to re-implement. JRuby is already halfway there as Ruby is (nearly) a valid LISP. How long until either Ruby gets macros or LISP gets a bytecode layer?
posted by Skorgu at 12:15 PM on April 4, 2007


In particular there are times I find myself wishing I could write queries in Prolog rather than SQL.

There are prolog's in Lisp. Like this one. And there are even systems that do what you want to do. Namely, AllegroGraph is a triple store that allows prolog queries.

I'm not aware, however, of any hookups to relational databases. Does anyone else? It sounds like an interesting idea.
posted by e40 at 12:18 PM on April 4, 2007


What sets Lisp apart from all other languages is that program and data have the same form. (this is a list) is both data and program.

As I said, that's not true. The structure known as a "list" in Tcl is also a program. Not that Tcl is so awesome, but it was born in like 1995. No doubt other scripting languages have caught on by this time.
posted by DU at 12:19 PM on April 4, 2007


e40: I've tried allegro. I'm not willing to pony up 600 for a non-crippled version.

This also has many effects on intergration. Does allegro integrate with apache well? Documentation basically stated you needed to use allegro's own webserver as an addition to apache in order for them to work together.

This is fine and good if you work for allegro but C# is free. Python is free. Perl is free. Their libraries are legion. That is your competition.

As for hostile, my main experience is with clisp, and it seems to quite often hide the internals of the whatever operating system it resides on. No standard way of opening a socket. No standard way of opening a file. Seemingly no knowledge of the Unix permissions (reading, changing, etc.)
posted by zabuni at 12:20 PM on April 4, 2007


Lists and Lists (see also), one of the most novel "adventure games" ever.

These days I get my list-oriented programming pleasure writing in Mathematica. Far too few people really 'get it', but when you do, it's a beautiful, beautiful thing.
posted by Wolfdog at 12:26 PM on April 4, 2007


Skorgu: There is this. Just a quick google search, can't vouch for its usefulness.
posted by zabuni at 12:26 PM on April 4, 2007


e40: I've tried allegro. I'm not willing to pony up 600 for a non-crippled version.

There's a student version for $99. There's a free version, though it has limitations.

This also has many effects on intergration. Does allegro integrate with apache well? Documentation basically stated you needed to use allegro's own webserver as an addition to apache in order for them to work together.

Have you read this?


This is fine and good if you work for allegro but C# is free. Python is free. Perl is free. Their libraries are legion. That is your competition.


The people that developed C# have the luxury of having let Sun spend $20M (likely much more) on PR before they jumped into the fray. Also, let's not forget the development tools business units at Microsoft don't have to worry about profitability. Same goes for Java development at Sun. IIRC, perl development was paid for by Larry's employer. It would be nice to find a benefactor for Lisp.
posted by e40 at 12:27 PM on April 4, 2007


After looking at lsharp:

;;; Lists all the items from an RSS Feed



(reference "System.Xml")



(= news (new System.Xml.XmlDocument))

(call load news "http://www.theregister.co.uk/headlines.rss")

(foreach node (selectnodes news "/rss/channel/item/title")

(prl (innertext node)))

Damn that looks sexy.
posted by zabuni at 12:33 PM on April 4, 2007 [1 favorite]


Yay! Language wars!

10 PRINT "BASIC 4 EVER!"
20 GOTO 10
posted by COBRA! at 12:36 PM on April 4, 2007


Hilarious. I thought it was some kind of recursive joke.

>Hilarious. I thought it was some kind of recursive joke.

>>Hilarious. I thought it was some kind of recursive joke.

>>>Hilarious. I thought it was some kind of recursive joke.
posted by ZenMasterThis at 12:43 PM on April 4, 2007


e40:

If you use an Apache webserver but want to also use Allegroserve, you must make the Apache webserver and the Allegroserve server work together.

From your link.

Is there the equivalent of mod_perl for allegro?

And yes, it would be great if someone really got behind lisp, but until they do, I will go where the light and heat are, if only because doing so will provide me with tools to get the job done.
posted by zabuni at 12:47 PM on April 4, 2007


There are prolog's in Lisp. Like this one.

Yeah, I don't actually know Lisp, but I suspect that you could pretty handily write a parser and interpreter for either one in the other.

I'm not aware, however, of any hookups to relational databases. Does anyone else? It sounds like an interesting idea.

I sure think so. There's feints and close ideas in a number of Prologs... mostly ODBC. The problem is that for the most part, to give yourself the Prolog layer for queries, you have to embed SQL queries in the Prolog, sortof defeating the point.

I think I do recall at some point seeing Prolog-like queries to an independent relational databse, but they're obscure enough I can't recall any of them or scare them up in a quick search. Most Prologs have their own database of sorts built-in or closely associated. Sortof like the AllegroGraph thing you pointed to.

But I'd love to see a general bridge that could interact with a commodity RDMBs. Or, at the very least, a Prolog query server that would let you do something like I described in this usenet thread. With the addition of AI-Prolog to CPAN, I've even considered hacking something like that in Perl if I get the time.
posted by weston at 12:48 PM on April 4, 2007


No experience with lisp proper, but some classes in scheme...*shudder*. Honestly, I'm not sure whether prolog is worse or not.
posted by juv3nal at 12:51 PM on April 4, 2007


PLT Scheme is free and has oodles of libraries for just about anything.
posted by MonkeySaltedNuts at 12:53 PM on April 4, 2007


Is there the equivalent of mod_perl for allegro?

No. Doing it with a parallel server is so easy, that the huge cost to build something like mod_lisp doesn't look very attractive. There is a mod_lisp for clisp, I believe.
posted by e40 at 1:05 PM on April 4, 2007


If you really want to learn Lisp, Practical Common Lisp is the way to go. Probably.
posted by mosessmith at 1:28 PM on April 4, 2007


Also, while I'm not an authority on programming languages, I have some experience, primarily with C++ and Lisp. To me, Lisp really is much more interesting than other languages, for the reasons (code as data, macros) e40 mentioned. The thing is, writing macros is very difficult. It takes a lot of getting used to, and most people give up before they get there.

The best argument I've heard against Lisp is not that it lacks libraries (there are plenty of libraries out there, and Lisp is so powerful that an experienced coder can write their own without much trouble), but that it's much less maintainable than other languages simply because it is so difficult/unused. Writing an open source project in Lisp, for example, would be a pretty terrible idea. If there are less programmers out there that understand Lisp , then your code is going to be much more difficult to develop once someone other than yourself becomes involved.
posted by mosessmith at 1:51 PM on April 4, 2007


So, I'm going to tap the hive mind here. If you had to tell a kid to learn one computer language, not as a theoretical matter but which one is of the most practical value, what language would that be? It sounds from the thread like it should be LISP. What if you could add a second?
posted by Pastabagel at 2:06 PM on April 4, 2007


pastabagel: Lisp is an awesome language for learning as a second language. If you grok lisp you grok a lot of powerful programing concepts. However I think it's a bad choice for a first language. Especially for a younger hobbiest programer.

When I first played with programing I wanted to write something cool. These days I suspect cool is something basic graphics, a really simple game, or maybe a web application. With lisp that is going to be fairly frustrating. The library support, especially in free lisps is just abysmal.
posted by aspo at 2:25 PM on April 4, 2007


Highly-relevant-to-post self-promotion: when I first got into Lisp, I setup lispmachine.net as a place to keep pointers to resources, online books, etc.
posted by mrbill at 2:27 PM on April 4, 2007


At the risk of starting a religious war, what would be a good free Lisp for someone to pick up, provided that they have a number of programming languages already under their belt?
posted by adipocere at 2:30 PM on April 4, 2007


For practical value: C++ or Java, with C# coming in closely behind. Lingua franca of the programming world. Free editions abound, and come with awesome libraries and great development environments.

You can even program one's xbox 360 with C# if you pony up the yearly 99 buck fee.

I personally like python as a starting language. Readable code, some nice lispy features. Comes in a nice windows installer with a simple IDE and full language tutorial. Decent library support.
posted by zabuni at 2:35 PM on April 4, 2007


Scheme is a 'teaching language' subset of LISP, meaning it is pure as the driven snow and meant for teaching programming.

LISP and is much larger language, and much more powerful, but would be simple to transition to after learning Scheme.

There is a really nice Scheme devel environment available for free called DrScheme. It does really nice syntax highlighting and paren-matching. (Don't even think about writing LISP (or Scheme) without an intelligent editor.)

"Structure and Interpretation of Computer Programs" is what we were given in CS 100 at UIUC (15 yrs ago...), and as I recall, is based on Scheme, not LISP...
posted by belling at 3:05 PM on April 4, 2007


Python is a rip-off of Haskell, by an idiot that didn't have the wit to comprehend Haskell, so created their own half-arsed language instead.
posted by veedubya at 3:06 PM on April 4, 2007


The best argument I've heard against Lisp is ... that it's much less maintainable than other languages simply because it is so difficult/unused.

If you are maintaining a program you don't understand, then I'd agree. Lisp is famous (and it is true in my experience, in spades) for being a language that people can both write code faster in and do more with less. I manage millions of lines of Lisp with a small fraction of the people that it would take in the C, C++, C#, Java world.

Writing an open source project in Lisp, for example, would be a pretty terrible idea.

This is clearly false. There are both open source Lisp projects and open source lisps.
posted by e40 at 3:20 PM on April 4, 2007


At the risk of starting a religious war, what would be a good free Lisp for someone to pick up, provided that they have a number of programming languages already under their belt?

www.lispmachine.net (mentioned above) has a list of free implementations on it.
posted by e40 at 3:22 PM on April 4, 2007


Pastabagel: If I was going to tell someone with little development background to learn a language. I'd recommend they first start with something like Perl, or Ruby and maybe Java.

Perl and ruby since they can be run as scripts (no compiling needed). It's a lot more interactive and allows interative debugging/learning.

Something like Java is nice since you can use the existing IDEs (tools for writing code) that have nice features like redlining programming errors or command completion to help you write the code in the first place.

Perl/Ruby/Python/Java all have amazing useful external libraries to provide pretty much any functionality you may want.
posted by bottlebrushtree at 3:43 PM on April 4, 2007


Writing an open source project in Lisp, for example, would be a pretty terrible idea.

This is clearly false. There are both open source Lisp projects and open source lisps.


Ok, but are you not closing your project off from 90% (or higher) of the community? I'm definitely pro-Lisp, but it is definitely an elitist's language. You might be ok with that, but it can be a serious disadvantage, especially if you're working on a big project that will ultimately be passed around a lot.
posted by mosessmith at 4:01 PM on April 4, 2007


Here's a provocative essay about lisp and clever but under-achieving students:
The BiPolar Lisp Programmer
posted by sebastienbailard at 4:07 PM on April 4, 2007


I wath (waiting) for (thomeone (to (make a joke) like ) thith, and get 20 favouriteth.)

((((it alwayth happenth))))))
posted by tehloki at 4:42 PM on April 4, 2007


If you had to tell a kid to learn one computer language, not as a theoretical matter but which one is of the most practical value, what language would that be?

Python. It's immediately useful. It's a real language, used by real professionals every day. The syntax is simple, but powerful enough to make difficult tasks easy. LISP is fun for purists, but to those of us who want to get things done, Python is the way to go.
posted by SPrintF at 7:00 PM on April 4, 2007


I can't fucking believe there was a Lisp (not LISP, people, it's not 1985 anymore) language war on MeFi and I didn't see it until 50 comments in. (And thanks for making me feel guilty for having SICP unread on my desk at work, Roger Dodger).

Seconding the recommendation for Practical Common Lisp, if you want to do things that are ... practical.

adipocere: If you're on Linux, I'd go with SBCL (I'm told it's a work-in-progess on Windows, but haven't tried it). It's under active development, has excellent library support, and is fast and robust enough for real work. There's also Lisp in a Box, which sets up a Lisp compiler and an Emacs configured to interact with it on Windows or Linux.

LISP is fun for purists, but to those of us who want to get things done, Python is the way to go.

You kids with your one-line lambdas, you're so darned cute!
posted by IshmaelGraves at 10:48 PM on April 4, 2007 [1 favorite]


Regarding jeffamaphone's unfounded claim that Lisp is not useful, I'm surprised that no one has posted this quote yet:
Go to Franz's success stories page [franz.com] for a list of Lisp success stories. But please don't assume this is an exhaustive list, and please don't assume Lisp is only useful for Animation and Graphics, AI, Bioinformatics, B2B and Ecommerce, Data Mining, EDA/Semiconductor applications, Expert Systems, Finance, Intelligent Agents, Knowledge Management, Mechanical CAD, Modeling and Simulation, Natural Language, Optimization, Research, Risk Analysis, Scheduling, Telecom, and Web Authoring just because these are the only things they happened to list. Common Lisp really is a general language capable of a lot more than these few incidental application areas, even if this web page doesn't totally bring that out.
- Kent Pitman
If you're looking for a FOSS Common Lisp, check out SBCL.
posted by oncogenesis at 12:06 AM on April 5, 2007


Java? PERL?? *sigh*
posted by DU at 7:14 AM on April 5, 2007


How long until either Ruby gets macros or LISP gets a bytecode layer?

Ruby's generally great at facilitating using functional programming techniquez, but macros? You need something like LISP's very simple and very regular syntax for macros. Ruby has an incredibly rococo syntax. This one isn't going to happen.

At least one LISP has had bytecode for a long time.

But it could be wonderful if one day, all the dynamic languages could join together on one VM, like Parrot, and hold hands.

Python is a rip-off of Haskell

Of Haskell? A purely functional language first specified in 1990, one year before Python was first released, after a decade of von Rossum working on its predecessor, ABC? What, because a decade later Python added list comprehensions?

Look, I like bashing Python as much as the next guy, but that's just silly.
posted by Zed_Lopez at 8:07 AM on April 6, 2007 [2 favorites]


It always astounds me how frequently LISP users point to Orbitz in order to justify their language choice. Not only is Orbitz mediocre, but most of the important and interesting work was, I understand, offloaded into C data structures in one of the worst and weirdest hacks ever perpetrated upon software.

By comparison, the entire internet is written in Perl. I mean, I just don't get it.
posted by felix at 12:40 PM on April 9, 2007


Another Lisp tutorial (well, a small Scheme actually) but... It's wrapped in interactive fiction!
posted by Roger Dodger at 7:23 AM on April 11, 2007


« Older The Destruction of the Pomo Tribe   |   How Specialist Town Lost His Benefits Newer »


This thread has been archived and is closed to new comments