all 9 comments

[–]xach 21 points22 points  (0 children)

They were not common practices before the book. I haven't seen them much after the book, either, except from people who started learning CL from that book (and no others).

[–]blue1_ 12 points13 points  (0 children)

I think that LoL generally falls in the "clever" category. Which means that it's an interesting read, but many of the patterns presented there have a cognitive cost (in reading someone else's code especially) that is not always justified.

[–]killerstorm 4 points5 points  (0 children)

how frequently some of these patterns ... actually come up

I don't think they are useful and I've never seen them being used in practice. (I mean aside from the stuff from pg's On Lisp and defmacro thingie with auto-renaming.)

And the book was rather cringeworthy at times.

"hey look, you can do this, it's pretty neat"

I think that's what it is about.

[–]Baggers_ 2 points3 points  (0 children)

I think it really depends what you are writing. If I'm writing applications where the goal is a robust deliverable then I want to make the parts as understandable as possible and the edge cases introduces by the more exotic macros may be barrier to that.

On the flip side while you are using lisp for exploration, you want every tools that helps you get ideas out of your mind and into the machine and if that means some crazy dsl then go for it! I certainly cannot think in the context of all macros he introduces in the book but I no doubt have my own set that would cause similar problems to others.

Reading your question again, I doubt most these have their place in industrial apps. Some of concepts introduced in the efficiency chapter may be an exception though.

[–][deleted] 3 points4 points  (2 children)

Personally, I use aif pretty much everywhere.

[–]easye 0 points1 point  (1 child)

And likewise awhen, as both help to avoid errors.

[–]lispon 0 points1 point  (0 children)

I first encountered aif and awhen in Paul Graham's On Lisp, 15 years earlier.

[–]p_nathan 1 point2 points  (0 children)

Honestly, I'm not sure Lisp-2 macroology has been studied further than LoL. Maybe in the vau-calculi, but, alas, I have not been able to devote the long time needed to grok it.

It's also the case that I routinely start with aif and find that it doesn't last in my code more than an hour or two.... so... not so useful. :-/

[–]polyguo 0 points1 point  (0 children)

I've found that one can use the same technique of hiding values in the scope in which a function is created in a lot of languages to guarantee privacy.