What are the differences between Clojure, Scheme/Racket and Common Lisp?

38,516

Solution 1

They all have a lot in common:

  • Dynamic languages
  • Strongly typed
  • Compiled
  • Lisp-style syntax, i.e. code is written as a Lisp data structures (forms) with the most common pattern being function calls like: (function-name arg1 arg2)
  • Powerful macro systems that allow you to treat code as data and generate arbitrary code at runtime (often used to either "extend the language" with new syntax or create DSLs)
  • Often used in functional programming style, although have the ability to accommodate other paradigms
  • Emphasis in interactive development with a REPL (i.e. you interactively develop in a running instance of the code)

Common Lisp distinctive features:

Clojure distinctive features:

  • Largest library ecosystem, since you can directly use any Java libraries
  • Vectors [] and maps {} used as standard in addition to the standard lists () - in addition to the general usefullness of vectors and maps some believe this is a innovation which makes generally more readable
  • Greater emphasis on immutability and lazy functional programming, somewhat inspired by Haskell
  • Strong concurrency capabilities supported by software transactional memory at the language level (worth watching: http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)

Scheme distinctive features:

Solution 2

The people above missed a few things

  1. Common Lisp has vectors and hash tables as well. The difference is that Common Lisp uses #() for vectors and no syntax for hash tables. Scheme has vectors, I believe

  2. Common Lisp has reader macros, which allow you to use new brackets (as does Racket, a descendant of Scheme).

  3. Scheme and Clojure have hygienic macros, as opposed to Common Lisp's unhygienic ones

  4. All of the languages are either modern or have extensive renovation projects. Common Lisp has gotten extensive libraries in the past five years (thanks mostly to Quicklisp), Scheme has some modern implementations (Racket, Chicken, Chez Scheme, etc.), and Clojure was created relatively recently

  5. Common Lisp has a built-in OO system, though it's quite different from other OO systems you might have used. Notably, it is not enforced--you don't have to write OO code.

  6. The languages have somewhat different design philosophies. Scheme was designed as a minimal dialect for understanding the Actor Model; it later became used for pedagogy. Common Lisp was designed to unify the myriad Lisp dialects that had sprung up. Clojure was designed for concurrency. As a result, Scheme has a reputation of being minimal and elegant, Common Lisp of being powerful and paradigm-agnostic (functional, OO, whatever), and Clojure of favoring functional programming.

Solution 3

Don't forget about Lisp-1 and Lisp-2 differences.

Scheme and Clojure are Lisp-1:
That means both variables and functions names resides in same namespace.

Common Lisp is Lisp-2:
Function and variables has different namespaces (in fact, CL has many namespaces).

Share:
38,516
MaiaVictor
Author by

MaiaVictor

Updated on March 06, 2020

Comments

  • MaiaVictor
    MaiaVictor about 4 years

    I know they are dialects of the same family of language called lisp, but what exactly are the differences? Could you give an overview, if possible, covering topics such as syntax, characteristics, features and resources.

  • andrew cooke
    andrew cooke almost 12 years
    this is good, but perhaps you should mention that racket is more than "just" scheme; it's a system that supports multiple (but related) languages (you can even define your own). also, clojure has various ways of doing oo-like programming (both a multiple dispatch approach vaguely similar to clos and something closer to java that is more efficient on the jvm). and scheme is edging towards more standard libraries (that also include oo) with r6rs, which racket supports.
  • ron
    ron about 11 years
    "Strongly typed dynamic language" is marketing. In this sense even Python is strongly typed.
  • Nas Banov
    Nas Banov about 11 years
    @ron: Python is strongly typed, just like Lisp (unlike say Javascript or VB). You are thinking "static typing" vs "dynamic typing" instead, see en.wikipedia.org/wiki/Type_system for all the varieties. But yes, it's marketing
  • bug
    bug almost 11 years
    Racket is not an implementation of Scheme, barring compatibility modes. See stackoverflow.com/questions/3345397
  • mtelesha
    mtelesha over 8 years
    I would also think Racket would be good to be added to this answer. I would think Racket is even easier to learn than Scheme due to the community and focus of the language. Racket (formerly named PLT Scheme) is a general purpose, multi-paradigm programming language in the Lisp/Scheme family. One of its design goals is to serve as a platform for language creation, design, and implementation.
  • oskarkv
    oskarkv almost 7 years
    "meant to simplify Scheme for the JVM nothing more" "just like every other JVM language" Yeah, right.
  • pyon
    pyon over 6 years
    Clojure does not have hygienic macros, as I have found the hard way.
  • Christopher Kuttruff
    Christopher Kuttruff about 6 years
    Clojure has hygienic macros. More info here: xivilization.net/~marek/blog/2013/09/17/…
  • Asai  Masataro
    Asai Masataro over 5 years
    I believe continuation as a first class object is a distinct (but rather technical) feature of scheme that should be noted. I would also add the condition system as another distinct feature of common lisp.
  • Jeremiah
    Jeremiah over 5 years
    Just wanted to point out that Common Lisp also has "built-in" vectors and maps (hash-tables), and that all recent implementations support concurrency with threads and with some nice libraries like lparallel.
  • lbalazscs
    lbalazscs about 5 years
    Gimp is written in C, and it supports Scheme, Python and Perl as scripting languages.