2012-06-27 67 views
85

我知道他們是同一種叫做lisp的語言家族的方言,但究竟有什麼不同?如果可能的話,您能否提供一個概述,涵蓋語法,特徵,功能和資源等主題。Clojure,Scheme/Racket和Common Lisp之間有什麼區別?

+0

我要求更全面地瞭解這些差異,因爲我倒下了這個問題對許多其他人很有用,對不起,如果它聽起來有辱人格的話。 – MaiaVictor

+3

錯誤的網站。對於真正的編程問題,stackoverflow是最好的。請參閱常見問題解答:http://stackoverflow.com/faq#questions –

+2

我總是會對哪個帖子應該去哪裏感到困惑。這是對工具的討論,對於這裏或程序員來說這是一個問題嗎?從邏輯上講,我會說把它移動給程序員,因爲它不是要求解決一個特定的問題,但這是一個很好的回答,恕我直言,恕我直言。 – octopusgrabbus

回答

79

他們都有很多的共同點:

  • 動態語言
  • Strongly typed
  • 編譯
  • Lisp風格的語法,即代碼寫成一個Lisp的數據結構(形式)與最常見的模式是函數調用,如:(function-name arg1 arg2)
  • 強大的宏系統,允許您將代碼視爲數據並在運行時生成任意代碼(通常用於ei 「新語法擴展語言」或創建DSL)
  • 雖然有能力容納其他範例,但經常用於函數式編程風格
  • 強調與REPL進行交互式開發(即,

    • 一個功能強大的面向對象子系統(Common Lisp Object System
    • 也許是最好的編譯器(Common Lisp是根據最快的Lisp:你的代碼的運行實例)

    Common Lisp的鮮明特色互動發展到http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html雖然沒有在它更.....)

Clojure的鮮明特點:

  • 最大的圖書館生態系統,因爲你可以直接使用,除了標準的清單()用作標準的任何Java庫
  • 載體[]和地圖{} - 除了向量的一般有用性和映射一些人認爲,這是一個創新,這使得一般更具可讀性
  • 更加重視不變性和懶惰函數編程,一定程度上受到啓發哈斯克爾
  • 強大的併發能力,通過軟件事務內存在語言層面的支持(值得關注:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

方案鮮明的特點:

+7

這很好,但也許你應該提到球拍不僅僅是「公正」的計劃;它是一個支持多種(但相關)語言的系統(甚至可以定義自己的語言)。此外,clojure有多種方式進行類似於oo的編程(包括多種調度方式,與clos類似,更接近於java的jvm方式)。並且計劃正朝着更多標準庫(也包括oo)加入r6rs,這是球拍所支持的。 –

+0

嗯。我認爲我在r6rs支持oo時錯了,對不起。 –

+0

不支持r6rs。 – soegaard

30

不要忘記Lisp-1和Lisp-2的差異。

Scheme和Clojure是Lisp-1:
這意味着變量和函數名都位於相同的名稱空間中。

Common Lisp是Lisp-2:
函數和變量具有不同的名稱空間(事實上,CL有許多名​​稱空間)。上述

44

的人錯過了一些東西

  1. Common Lisp的有載體和哈希表,以及。不同之處在於Common Lisp使用#()作爲向量,沒有使用哈希表的語法。 Scheme有向量,我相信

  2. Common Lisp有讀者宏,它允許你使用新的括號(就像Racket,Scheme的後裔一樣)。

  3. 計劃和Clojure的有衛生宏,而不是Common Lisp中的不衛生那些

  4. 語言的全部是現代或有大規模的翻修工程。 Common Lisp在過去的五年中已經獲得了大量的庫(主要歸功於Quicklisp),Scheme有一些現代化的實現(球拍,雞,Chez Scheme等),並且Clojure最近被創建出來了。內置OO系統,儘管它與您可能使用的其他OO系統完全不同。值得注意的是,它不是強制執行的 - 你不用就可以用來編寫OO代碼。

  5. 這些語言有不同的設計理念。 Scheme被設計爲理解Actor模型的最小方言;它後來被用於教育學。 Common Lisp旨在統一涌現出的無數Lisp方言。 Clojure是爲併發而設計的。因此,Scheme具有最小和優雅的聲譽,Common Lisp具有強大的功能和範式不可知性(功能,OO等等),而Clojure則支持函數式編程。

+3

球拍是*不*執行計劃,禁止兼容模式。看到http://stackoverflow.com/questions/3345397 – bug

+0

Clojure不*具有衛生宏,因爲我發現了困難的方式。 – pyon

1

GIMP是寫在方案:)

其實配發的軟件,一些人認爲可能是用C++編寫可能是Lisp的保護傘下完成的,它很難挑選出金蘋果出來的束。事實是C++並不總是很受歡迎,它似乎只是因爲更新歷史而流行起來。對於本世紀不到一半的人來說,C++甚至沒有使用多線程,而今天Python已經成爲了無用的未經測試的buggy膠水代碼的地方。稍微快一點,現在我們看到了函數式編程的興起,它更像是適應或死亡。就適應性而言,我認爲Java是正確的。

Scheme旨在簡化Lisp語言,這是它唯一的意圖,除非它從未真正發現過。我認爲Clojure做了類似的事情,它簡化了JVM的Scheme。它就像其他所有JVM語言一樣,只是爲了誇大用戶體驗,只是爲了簡化Java領域的樣板文件。

+0

「意思是簡化JVM的Scheme,就像每隔一個JVM語言一樣,」 「就是這樣。」 是的,沒錯。 – oskarkv

相關問題