Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

If I may ask, what references would you recommend to someone interested in something like Lisp, but who has never touched a functional language before?


Not OP, but Lisp isn’t really a functional language — it’s a usual language that also has some functional ideas inside. Mutation is common, don’t think Lisp will be a language like Haskell.

For resources, I would recommend Practical Common Lisp[0] and PAIP[1].

For some modern development practices, the Common Lisp Cookbook[2] is great.

[0]: http://www.gigamonkeys.com/book/

[1]: https://github.com/norvig/paip-lisp

[2]: http://lispcookbook.github.io/cl-cookbook/


> Lisp isn’t really a functional language — it’s a usual language that also has some functional ideas inside.

The idea that "functional language" means "purity" is something that was retconned onto functional programming in the 90s decades after Lisp had defined functional programming to mean programming in terms of expressions that produce values.

I like the ML/Miranda/Haskell lineage of languages a lot, but it really bugs me when people in that camp lay claim to some notion of being a "better" functional language than the older Lisp family. (Lispers, while smug about many other things, are generally less smug about how "pure" their languages' approach to functional programming is.)

This is like arguing that Lagavulin isn't "really" whiskey because real whiskeys are made in the US from corn mash.


Lagavulin isn't whiskey, it's whisky (/s)


There's no true scotch, man.


Lisp is "Functiony"! ;)

But it took JavaScript to invent the concept of "Truthy".

https://www.sitepoint.com/javascript-truthy-falsy/


Perl 5 has truthy values, and it came out a year (1994) before JS (1995). The idea probably appeared in Perl 1 (1987), and probably was borrowed from shell scripting, etc. It wouldn’t surprise me if “Truthy” predated unix.


Sigh. Immutability is a relatively recent addition to the long list of features that defines a language as "functional."

In the beginning, "functional" meant functions were first-class objects and there was little--if any--global state. Lisp passes this test. Lisp invented this test (especially Scheme which introduced lexical scoping and closures).

If you want to write code with immutable data, you can certainly do so with Lisp; it just doesn't force you to. For the most part Lisp creates a brand new data structure when you "modify" an old one. You have to work a bit harder to actually mutate things.

Where e.g. Haskell is "more" functional than Lisp is more about automatic currying than immutability. Plus the static type system that allows monadic programming, which is much more difficult in Lisp because of Lisp's dynamic typing.


> Lisp isn't really a functional language

I guess I have even more to learn then :). Thank you for the links.


Common Lisp can be used as a functional language, or imperative, or extremely advanced OO (see CLOS).

There are lots of different Lisp's though. Clojure is the most popular one that runs on the JVM and idiomatic Clojure is generally pretty functional although it calls out to lots of Java which is OO.


Lisp DEFs the FUN in FUNCTIONAL.


On Lisp is the best Lisp programming book I have ever read. Both PG’s lisp books are great and you can just read those and the CL hyperspec.

On Lisp is out of print, but can be downloaded.


I would like to recommend that after reading PG's On Lisp, that you also consider Doug Hoyt's Let Over Lambda. Both are really great books for advanced study.


I think Racket might be worth you spending one or two evening with, to see if you like it. It has an OK IDE, and a rich ecosystem.


I second this, I discovered scheme through racket and got a lot of enjoyment out of it. DrRacket is easy to install and a great platform. I’d it a week to get used to it.




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: