10 ms·
Is Lisp still useful in today's world? (2011)
- mindstab 14y agoLearning to program in lisp (specifically reading Practical Common Lisp [http://www.gigamonkeys.com/book/] http://www.gigamonkeys.com/book/]) has made me a better programmer in all other languages even if I don't really use Lisp. Even my friends/coworkers have noticed it when coding together. My style is forever improved. Learning Lisp just seems to promote better ways of tackling programming problems that is transferable to other languages where it's not as encouraged naturally even if superior.
- monkeyfacebag 14y agoCompletely agree that learning functional programming has improved my thinking and code. The one difficulty I continue to encounter is switching back and forth between recursive and iterative thinking. From a computational perspective they may be equivalent, but from a cognitive perspective they aren't (at least in my case). I don't know how many times, for example, I've been bitten by a stack overflow when jumping into Python from Haskell (or equivalently, jumping directly into the ST Monad because I want to iterate through some lists).
- pavelludiq 14y agoI've been using Common Lisp for two years now, I've written exactly ONE recursive function that wasn't an exercise or an example. Functional interfaces to functions with local state in loops? What exactly is wrong with that? For example it is my opinion that this function is in no ways inferior to a recursive equivalent: (defun range (end &key (start 0) (step 1)) (loop for i from start to end by step collect i))
- baddox 14y agoI suppose that most of the data structures which are naturally understandable in their recursive forms (like merge sort) would already be accessible via libraries.
- Falling3 14y agoAs far as I know (which isn't too much), there's nothing wrong with that. But since monkeyfacebag mentioned the psychology of code writing, there definitely seem to be algorithms that lend themselves to recursion. At the very least, some algorithms are more intuitively grasped as recursive - and the same obviously holds for iterative.
- pavelludiq 14y agoyes, usually anything having to do with recursive structures, like threes, is a good fit for recursive algorithms. In fact, the function I wrote had to generate a directory structure out of a template: https://gist.github.com/pvlpenev/4760658 https://gist.github.com/pvlpenev/4760658 (and i still used loop :) But keep in mind that some things, although recursively defined, are better computed in other ways, the most obvious example is a Fibonacci sequence, which if I really needed, I would precompute and stick in an array for constant time access or something like that(maybe memoize a recursive function).
- betterunix 14y agoPersonally, I find that traversing data structures recursively is more straightforward than iterative approaches, at least for most of the data structures I deal with. This sort of thing, for example: (defun search (tree val) (cond ((null tree) nil) ((= (car tree) val) tree) ((< (car tree) val) (search (cadr tree) val)) ((> (car tree) val) (search (cddr tree) val)) ) ) I write this sort of code all the time for more complicated structures; iterative solutions would involve keeping track of a bunch of local variables, which only makes the code more difficult to deal with.
- baddox 14y agoThe Little Schemer is the book that got me thinking about data structures recursively (starting with linked lists), and that was later furthered by SICP. http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/02... http://mitpress.mit.edu/sicp/full-text/book/book.html http://mitpress.mit.edu/sicp/full-text/book/book.html
- aerique 14y agoI noticed my usage of recursive functions going up and becoming more natural to me after reading The Little Schemer. Check it out, it is a really nice book.
- gruseom 14y agoFunctional interfaces to functions with local state in loops That's how I write Lisp too. It seems to me the nicest way to minimize overall complexity.
- wglb 14y agoI remember a correspondence between Knuth and Dijkstra about a deep problem involving four (!) stacks in the recursive solution. One or the other of them stepped back and found an iterative solution that was much easier to understand. However, whether or not your example shows something that is not inferior is likely a matter of opinion, not fact.
- Quarrelsome 14y agoAfter reading up on lisp and associated topics (purity mainly) I rewrote a component in our C# code base and made it magnitudes of order more stable and atomic. I hadn't written a line of lisp (although counted many brackets when trying to read along) but just studying it helped me think about programming problems a bit differently.
- xyzzy123 14y agoYep! My joke is that "Practical Common Lisp" is the best Javascript book ever written ;)
- RyanMcGreal 14y ago"Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot." -- Eric S. Raymond
- gruseom 14y agoIf we're quoting that then we should also quote PG's objection to it: if Lisp makes you so much better a programmer, why wouldn't you want to keep using it?
- mindstab 14y agoPractical reasons: The language is great for enhancing your style but in practice it's been one of the hardest languages I've come across to make do real things. It interacts with the outside environment very poorly and more awkwardly. It's got multiple slightly incompatible implementations and it's library set is relatively light, green, wastefully overlapping and not very well maintained. There's a reason Java won't go away and that's that it runs everywhere releatively easily and interfaces with stuff acceptably well. Python is now doing a good job of this too. Lisp has a looong way to go on this front and I do speak from some limited experience. It's very pleasant if all you're doing is staying inside lisp and interacting only with your own code but as soon as it's asked to play nice with others it gets a lot less fun. And staying inwardly focused, never looking out and never talking to anyone else ultimately means get very little real productive work done. :(
- DigitalJack 14y agoPlease take a look at clojure. There are a lot of videos on youtube... there is a specific clojure channel. I don't recall the specific name, and work blocks youtube unfortunately. Clojure runs on the JVM and has great Java interop, so you get the fun of lisp, and the convenience of all the Java libs.
- mindstab 14y ago
- duaneb 14y agoTHe only thing that really distinguishes lisp these days (IMHO) is its macros. However, I think there are better languages out there to learn any particular paradigm-Python/Java for OO, Haskell/Erlang for functional, C for procedural, Ruby/Python for dynamic & duck typing, etc. Lisp is great if you need a compiler tomorrow. If you have the time, though, I think that other languages are better when there's more time to invest. EDIT: To actually answer the question, of course it's still relevant and useful, but perhaps other languages have caught up. It's still used in industry (Google uses it via ITA, IIRC).
- bcoates 14y agoMulti-methods are still scarce among languages with OO features, and it's a big hassle working around that shortcoming. There's probably more gems in CLOS that haven't made it out into the mainstream yet.
- BruceM 14y agoMultimethods and the condition system are 2 of my favorite things.
- yakiv 14y agoGenuine question here: when are multimethods useful in practice?
- bcoates 14y agoOne of the less controversial uses of OO dispatch is to replace switch statements or chained ifs with a polymorphic function. Try to do this more than a few times to the same codebase, and you'll either wind up having to merge classes into weird hierarchies or use hacks like "the visitor pattern" to proceed. The other big use of multimethods is when you have static-type function overloading (as in Java/C++) and decide you need to move the overload selection into runtime via the dynamic type of the arguments. This isn't possible in the general case without doing all the dispatch work yourself, but it's a trivial with multimethods.
- richeyrw 14y agoIs Plato still useful in today's world? I think if you answer that then you should be able to give a a minimum a qualified "yes" to the question about Lisp.
- dschiptsov 14y agoNot sure about Plato, I would rather say Buddha.)
- IvyMike 14y agoI was introduced to both Lisp and PLATO in 1992 at UIUC. I was very confused by statement until I realized you meant Plato, not PLATO, which has very little use in today's world. https://en.wikipedia.org/wiki/PLATO_(computer_system) https://en.wikipedia.org/wiki/PLATO_(computer_system)
- dschiptsov 14y agoThis. Very. Site.
- chc 14y agoI'm not so sure that's a good example. It seems to me that PG had a Lisp he'd created for his own gratification and Hacker News was a good chance to try it out in the real world. It's hard to imagine Hacker News would have suffered if Arc hadn't been ready yet and he'd been forced to use Django or something. I think HN helped Arc more than vice-versa.
- dschiptsov 14y agoThe point is that he (with mr. Morris, I suppose) made this site quickly, cheap and are able to evolve it on the go, almost without downtime with help of very few people. Another point is that this site is the proof of an approach to software development described in the On Lisp book. So, it is not a gratification, it is just a real-world project they have done for themselves to make money. It is not some showcase or a demo, it is real thing. In case of Django, I think, it will require much more man-hours for building and maintaining and more resources (cost) to run. This is an example of Less is More principle in action: less code (the core language concept) and, as a consequence, less everything - time, people, money. Lisp isn't just a language with parenthesis. It is a whole philosophy (a multi-paradigm language). Well, better to read On Lisp.
- nialo 14y agoPG says in several of the Arc essays that HN exists because he found that programming languages turned out better when their creators worked on the language and some problem being solved in that language together. HN exists because he needed an application to force Arc to be better.
- juan_juarez 14y agoI hate to break it to you but HN is not a great site because of it's implementation. HN's value lies in the content and community. If somebody other than PG launched an identical site today, nobody would even bother making an account.
- base698 14y agoIf you are a JavaScript, Ruby, Python programmer it will teach you where first, rest, map, reduce, partial, apply, and a slew of other methods came and what functional programming is. It also has the side effect of teaching you how machines work at a low level (if you follow the SICP) with "environments" and frames. If you are a Java or .NET developer you'll pick up functional techniques and understand the origins of the object model. That's not even getting into macros, which basically are runtime code that writes code. I'm not aware of another language that has lisp style macros. Ultimately it will help you be a better programmer even if you don't at first see the benefit.
- gre 14y ago* Most raw code written So there are 20,000+ red-black binary tree implementations in Scheme. Great?
- graycat 14y agoSorry, but my view of what is really "useful in today's world" is what the language has that makes it easy to get at, i.e., make use of, other software, e.g., TCP/IP, device drivers, operating system services, authentication services, APIs, something old written in Algol, Cobol, Folderol, Fortran, C/C++, etc. Actually there is a theme that a language can be interpretive and, really, still fast enough if mostly it is used just as thin glue to connect other, efficient software where nearly all the time goes. E.g., IBM's in-house mainframes on their VNET were long run heavily with just their interpretive language Rexx: VNET was a little like the Internet except the network was less smart and the computers also played the role of routers. At one time IBM had 3600 such mainframes around the world. I've been using Rexx on Windows as a scripting language and want to convert to PowerShell due to the better access to Windows services.
- rdmckenzie 14y agoSpeaking as a Lisper, I have to admit that this is an open question for me. On the one hand, the needs of parallel systems and state management offered by functional languages stands to bring Lisps (Clojure, Common Lisp etc) and other languages like Erlang ever more attention as we programmers attempt to manage the complexities of multicore design and distributed systems. As a systems programming language I think that lisp has utterly failed. The Lisp machines are dead for various reasons (which I'm researching right now as a side-project) and to the best of my knowledge compiled lisp has clearly not taken the place of C in building operating systems (although I hope to do exactly that as does the author of [http://www.loper-os.org/] http://www.loper-os.org/]). All of this comes down to an individual's definition of utility. Lisp is by definition of Turing Completeness just as capable as any other language you may wish to name, but with the usual Turing Tarpit or small language warning that you may have to roll your own. My perception, and one which several posts here on HN has affirmed is that traditionally Lisp was used by lone AI researchers who needed the power to roll their own anything quickly and efficiently. As a result of this "roll my own" mentality and simple lack of the internet (it was early and mid 1980s or so) libraries and SDKs as we know them were never built for Lisp systems. Another difficulty is that as several other comments note there is no "one true" standard for Lisp. There is Scheme (which has official specs), there is ANSI Common Lisp which is a spec upon which several implementations have been based, and then there are countless other DIY and nonstandard lisps which elect to use different function names and otherwise make code non-trivially portable between lisp implementations. Not having a clear standard didn't help the lack of a library ecosystem at all, but some dialects such as Common Lisp and Clojure seem to be developing workable community library ecosystems. Of late Common Lisp has grown a library structure via ASDF code loading tool and the Quicklisp package manager, but Clojure is the only lisp I've ever encountered that really made any effort at all in the direction of providing native support for packaged libraries. The Clojure language includes syntax designed for allowing one file to explicitly state and "require" code in other files or even other libraries: a feature which is lacking from the Common Lisp standard. Thanks to technomancy's Leiningen tool and the clojars repository Clojure has a user-created system similar to Quicklisp + ASDF but trading ASDF's search path idiosyncrasies for a search path structure which should be familiar (or at least unsurprising) to Java developers. TL;DR / Conclusion If your boss comes to you and asks you to write a webpage, Lisp is probably not what you turn to. Could you? Sure, <shamelessplug> my blog is built in Clojure [http://arrdem.com http://arrdem.com].</shamelessplug> [http://refheap.com http://refheap.com] is built in Clojure. [http://www.chris-granger.com/ http://www.chris-granger.com/] is (presumably) Clojure. I know I've seen blogs in Common Lisp and other dialects but URLs escape me. Your boss says "Access the database", there are Clojure (okay fine Java but there is no real difference) libraries for SQL, MongoDB, Cassandra and more. Common Lisp also has SQL and MongoDB libraries. In short, while there is value in Lisp it is (for the time) not practically greater than the value of any other language despite the elegance of the functional approach and the power of the macro system. Hence its failure thus far to take over the world. However that same value proposition is improving as the CL and Clojure communities create and publish ever more libraries leading me to hope that Lisp may indeed take over the world one day.