因 AI 而設計的語言 LISP

Galois發表於2020-01-19

前言(Lisp 可以做別人告訴你不可能做的事)

LISP(List Processing)由來自麻省理工學院的人工智慧研究先驅 約翰·麥卡錫(John McCarthy)在1958年基於 「λ演算」 所創造,採用抽象資料列表與遞迴作符號演算來衍生人工智慧。

創造力

語言是和人相關的,真正有創造力的人不多,大部分人都是應用。語言的核心人物如果不創造出來方便普通人應用的基礎,那麼就沒人用這個語言了。雖然 Lisp 中不缺乏共享資源,但讓普通人容易使用的不多,有探索精神的人在人群中比例是很小的,大部分人一聽說 Lisp 用的少,就把 Lisp 剔除了。

語言和時代

Lisp 有其輝煌的歷史,但時代跟 Lisp 開了個玩笑。十幾年前估計沒幾個人看好 Javascript,可是 Javascript 現在卻風生水起。Lisp 同樣會像 Javascript 一樣由於時代的不同,而重新被人認知。(這點是存在爭議的,我會在另一篇文章中說明爭議性

抽象世界和現實世界

Lisp 幾乎不是一門語言,而是可以構造一個世界的規則。Lisp 強大到可以構造自己的一個世界,然後活在這個世界裡。這個世界和現實世界本身就是一對矛盾,自然就存在兩個世界如何對應的問題。

語言特點

  • LISP 為「函式式程式設計」語言,所有運算都能以函式作用於引數的方式來實現。
  • LISP 沒有命令式語言程式中常見賦值語句和變數,重複的過程可以使用遞迴的函式呼叫來表示,並不需要使用迴圈模式。
  • LISP 是古老的函式語言、弱型別、動態推斷,其程式碼本身就是各種列表。每一個表項均可以儲存任何型別的資料如數字、函式、符號或一個子表等,在編碼時,可以隨時操作以更新列表。
  • LISP 核心的運算子只有7個運算子:quoteatomeqcarcdrconscond。前三者 quote、atom、eq 用於符號的推斷;car、cdr、cons 操縱表格;cond 負責分支判斷。這種簡潔定義,非常接近「圖靈機」原型的純函式式語言,是現代語言完全無法比擬的。
  • LISP 作為弱型別這優點相對缺點則是執行效率的低下。原始定義簡潔的缺點使到大型開發工程變得困難,自底層到高層,自二維表查詢到物件導向,使用者需要嵌入更多的函式來實現,致使LISP眾多方言的衍生。

語言組成

資料型別

LISP 只有兩種資料結構,原子(atom)和(list)。原子為識別符號形式的符號或數字的字面值,表則是由零個或多個表示式組成的序列。基本上,LISP 程式,並不需要使用一般表處理所必需的任意插入及刪除操作。

語句結構

LISP 的語法是簡潔的典型,程式程式碼與資料的形式完全相同,以圓括號為邊界的表。

表:(A B C D)

按資料來解釋時,它是一個有 4 個元素的表,按程式碼來解釋時,它是將名為 A 的函式作用於 3 個引數 B、C、D。在 指定表結構 時將表的元素放在圓括號中,簡單的表的元素僅限原子而成的方式是:
(A B C D)

巢狀表結構 亦是以圓括號來表示,表:(A (B C) D (E (F G))) 由 4 個元素組成。
第 1 個元素是原子 A,第 2 個是子表 (B C),第 3 個是原子 D,第4個是子表 (E (F G)),它的第2個元素是子表 (F G)

關鍵字

LISP是一個函式式程式語言,並無關鍵字或保留字設,置使用者可自行再定義。

語言執行

LISP語法,可透過執行 Hello World 程式來體現。此程式透過 XLISP-STAT 2.1,3.45 Beta 版編譯器執行。

(DEFUN HELLO ()

  "HELLO WORLD"

)

語言應用

LISP是函式式程式設計的先鋒,其諸多革命性的創新思維影響了後續程式語言的發展,亦完全壟斷人工智慧領域的應用長達三分之一個世紀。曾在開展初年出現的低效率因素亦在集體改良中被移去,成就了廣被應用於軟體開發、電子商務及金融系統的 Common Lisp、Scheme、Emacs、Lisp、Clojure 等。

Lisp is a language for doing what you've been told is impossible.
——Kent Pitman

本作品採用《CC 協議》,轉載必須註明作者和本文連結
不要試圖用百米衝刺的方法完成馬拉松比賽。

相關文章