2016-10-10 100 views
0

有Clojure,Scheme等是LISP的方言,你可以在this SO question on which dialect is the best找到更多。這是什麼意思一種語言是LISP的一種方言?

我的問題很基本 - 什麼是LISP方言?像C,C++,Java,JavaScript,PHP這樣的語言有相似的語法,但是是不同的語言。 Poeple不稱他們爲ALGOL的不同方言。那麼爲什麼人們稱之爲LISP的這些方言?這是什麼意思?

+0

題外話,因爲主要是基於意見。請'重點關注您遇到的實際問題。包括你已經嘗試過的內容以及你正在嘗試做什麼的細節。 「避免主要基於意見的問題,或者可能會產生討論而不是回答的問題。」 –

+0

我聽說過馬佐夫人,大波蘭人等,這是波蘭方言。什麼是波蘭方言?它是波蘭文法的一個子集或超集,還是一種非常具體的使用該語言的方式? – molbdnilo

+0

@RainerJoswig同意這不是我遇到的問題,毫無疑問。但不同意的答案將不得不基於意見。如果人們使用* Lisp方言*術語,那麼它確實有意義。你可以用同樣的方法禁止許多現存的問題。 – ducin

回答

2

只有幾個語法。我們有Algol幾乎涵蓋了所有的編程語言,如SQL,Python,Pascal,PHP和JavaScript。有些人可能會說,其中大部分是C或B,他們是正確的,因爲這是第一個用{取代典型的begin。看看你的個人資料,你大概知道algol方言,當你學習最後一個方言時,它可能很簡單,因爲你已經從他們的兄弟語言知識中瞭解了很多。你沒有學過一種新的語言,而是你已經知道的一種變體。

Lisp進入50年代後期,它有符號和列表。它的語法不是基於Fortran,那是當時選擇的語言。原始論文使用幾個基元表示eval。你可以在Paul Grahams excellent essay閱讀。如果你知道一種方言,就像algol方言一樣學習另一種方言也很容易。試圖通過同化algol來學習口語方言對我來說非常令人沮喪,所以我通過經驗來了解這一點。

維基百科有一個很好的programming language tree你可以瀏覽。就像在自然語言中一樣,你有像Finish這樣瘋狂的語言,而不是在indieuropean語言樹上找到的地方。你在編程語言中也有這樣的島嶼。 Lisp和Algol即使在幾十年來受到一些影響,也是真正不同的世界。

至於它是一種Lisp方言這是一個有點朦朧,但我將包括具有這些功能一個所有的語言所需要的答案:

  1. 完全括號拋光前綴符號。 (S表達)

  2. cons,car,cdr和一個符號類型的功能是一等公民。例如。你可以創建(在流程mapmapcar

當然不可否認的一個口齒不清的方言本來這兩個,但我認爲只有一個作爲口齒不清以及每一種語言。

Sassy是具有更好(lisp)語法的英特爾彙編。它也許可以擴展宏並使用Scheme的特性,所以它是一個Lisp,但它的限制並不是所有的都會將它看作是一個Lisp方言。

JavaScript的創建者Brendan Eich原本想製作一個Scheme方言。 JavaScript非常接近Lisp,但我仍然不認爲它是一個lisp,因爲它既沒有我的lisp功能集。如果他們把一個單獨鏈接列表作爲規範的一部分,我會認爲將它稱爲Lisp方言,語法非常糟糕。其他人可能會把JS當作lisp。

2

我建議你先從wiki,它說

在Lisp的世界裏,使用基本的S-表達式語法和Lisp的語義被認爲是Lisp的方言,但他們大相徑庭大多數語言,比如說,Racket和Clojure。

我要說的是,Lisp語言的方言必須訂閱最根本的Lisp的想法,具體而言,簡單的任務應該很容易,難的任務應該是可能的

這通常意味着該語言應該是可擴展的,IOW,它應該增長以滿足您的需求。這提示了的方向,它們允許擴展語言語法。這反過來又要求原始語法應該相對簡單,IOW可能是基於Sexp的。

所以,對我來說,一個Lisp方言的特點是

  • 強大的宏功能(IOW,滿語可以在編譯時代碼轉換)和
  • 簡單的語法。

PS。請注意,根據一些人,Scheme是Algol的一種方言,所以這不是一個嚴格的概念。