Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I was recently thinking about the large variety of lisp languages, specifically the fact that while they all have similar syntax, and could all in theory be implemented from the same small set of primitive functions, the way in which one typically uses each lisp can vary widely compared to all the others. I realized that one could plausibly make the same statement about the family of languages with "C-like" syntax. Yet, most "C-like" languages are commonly distinguished from each other, while it is common to refer to "lisp" in general, and not any specific variant of lisp.

So, are C-like languages really more different from each other than lisp-like languages? Or do they just appear so because they have greater variability in syntax? Why are lisp-like languages more frequently lumped together into just "lisp"? No one would ever refer to C, C++, C#, Java as just "C".

share|improve this question
add comment

2 Answers

up vote 6 down vote accepted

It really comes down to the use of S-expressions by the Lisp family. A powerful macro system is a defining characteristic of a Lisp, so these S-expressions can be easily manipulated at macro-expansion time to, say, slightly transform a Common Lisp program into a Scheme program.

I've developed a few systems where an explicit requirement was to run both in SBCL and Chez Scheme. The languages are similar enough that we can write the code in SBCL, and then run it in Scheme by loading a <200 line front-end and loading the .lisp files directly.

More importantly, one develops particular patterns of thinking when learning any Lisp that are directly transferrable to learning any other. The main Lisp "design pattern" is to think about programs themselves as fluid things to be manipulated with macros and direct list transformations. You'll find this pattern anywhere you find S-expressions, simply because the homoiconicity makes it possible.

In contrast, the patterns of curly brace languages are typically not driven by the features of a particular language. Instead, some of the languages support general paradigms like OOP, and programmers in those languages adhere to them at varying levels depending on their problem domains.

This can be a benefit for specialization, but it also means that there's not as much coherence even among programmers of a single language. I've worked on big enterprise Java applications, but ask me to tinker with a big desktop Java program like OpenOffice Eclipse and I'd basically be learning from scratch.

So, I'd say the Lisp family is indeed more closely related, possibly due to the vastly smaller number of practicing Lispers, but also due to the unique way that any Lisp makes a programmer think.

share|improve this answer
2  
I know it is a common misconception, but OpenOffice is almost entirely written in C++, not Java. –  Nemanja Trifunovic Apr 10 '11 at 14:16
    
@Nemanja thanks! had no idea –  Adam Apr 10 '11 at 16:22
1  
Run as both Common Lisp and Scheme? What kind of project was that? –  compman Jun 8 '11 at 3:24
    
@compman: a term rewriter in ACL2 that we wanted to be able to use in Scheme rather than requiring all of ACL2 –  Adam Jun 9 '11 at 0:26
add comment

"C-like" languages widely vary in their semantics and applications: C and C++ are low-level system languages and JavaScript is really much closer to Lisp than to C.

On the other hand, Lisp languages (Scheme, Common Lisp, Clojure) are much more close to each other.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.