10.19 神祕的人工智能語言——Lisp語言

自1958年以來,一種古老的語言一直存在,並被用來解決編程和計算機科學中的現代問題。

在1950年代中後期,麻省理工學院的約翰·麥卡錫有一個要解決的問題。作為人工智能項目的一部分,他需要一種可以處理數據列表的編程語言。以正式方式構成的句子代表著世界的信息。計算機將導航和處理句子的列表來模仿人類推理。例如,通過比較由列表組織成的可能語句來回答問題。


神秘的人工智能語言——Lisp語言


用簡單的話來說,如果你是計算機,並且程序會詢問你在寒冷和飢餓時該怎麼辦,請列出可能的結果列表,然後瀏覽該列表以找到合理的結果。例如,如果你感冒,你將傾向於與溫暖有關的句子,而避免與感冒有關的句子。這個問題拋給了麥卡錫,因為沒有適合列表的軟件語言,麥卡錫必須創造自己的語言。

但是接下來發生了一件有趣的事情。麥卡錫創建了他的語言,他稱之為Lisp——List Processing的簡寫。正如保羅·格雷厄姆所說,麥卡錫為編程所做的與歐幾里得為幾何所做的一樣。他從簡單的運算符和函數符號系統構建了一種編程語言。但是他認為最重要的語言部分,即用於處理數學語法的m表達式,對使用Lisp的人來說最不重要。麥卡錫語言的次要部分之一,用來描述數據的s表達式,在隨後的五十年中不斷影響著許多編程語言。

更加有趣的是,斯蒂芬·羅素將Lisp中的理論評估函數轉換為真實的機器代碼。 Lisp現在可以解釋用於描述數據的Lisp s表達式語句並運行Lisp程序。 1962年,第一個將Lisp編譯為代碼的軟件將評估代碼(在代碼運行時處理)和編譯代碼(在代碼運行之前處理)混合在一起。在20世紀70年代,麻省理工學院的丹尼爾·愛德華茲向Lisp添加了垃圾回收功能,該功能可以釋放未使用的內存以提高語言的效率。


神秘的人工智能語言——Lisp語言


最初,它是一種解決問題的優雅極簡方案,即作為人工智能項目的一部分來處理列表,它擁有完整的編程語言的種子,其創新思想可以影響數十種語言。例如,麥卡錫創建了現在常見的if-then-else條件語句,因此Lisp可以以緊密的結構化方式處理列表。 格雷厄姆還認為Lisp是思考軟件編程問題的第二種方法。 FORTRAN和C是另一種更為熟悉的軟件編程方式。

儘管關於哪種編程語言最好的爭論經常引起激烈的討論,但對於Lisp作為最佳語言的爭論尤其強烈,這可能是由於其使用壽命長。許多有才華和創造力的人都在Lisp上進行工作,以完善和優化該語言。沒錯,Lisp一直是解決編程和計算機科學問題的不尋常且別出心裁的解決方案。一方面,Lisp一直傾向於使用簡單的靈活解決方案,而其他語言卻增加了複雜性(出於充分的理由)。麥卡錫的直覺是,隨著時間的推移,一種更簡單的語言將提供更多的靈活性。

但是,對於軟件語言而言,沒有對與錯,最好或最壞的情況。在給定情況下,只有哪種語言最有效。 Lisp是第一種為FORTRAN及其後續語言提供替代語言的語言,同時又不偏離熟悉的語言。Lisp的不尋常部分之一是宏。如果你不知道,宏就是操控其他程序的代碼。考慮一個重複的計算任務,可能是添加數字,然後將代碼放入一個塊中,然後調用該塊,而不是重新鍵入用於添加數字的代碼。如果你使用過Word宏,你就會明白,宏擴展了編程語言的功能。


神秘的人工智能語言——Lisp語言


藉助Lisp,宏還允許程序員將特定於域的語言嵌入Lisp中。宏可以直接訪問該語言所包含的解析器。使用Lisp,代碼是數據(列表),數據可以是代碼。它是一種可編程的軟件語言。函數可以像變量一樣傳遞並在代碼中的其他地方進行處理,也可以像函數一樣直接進行處理。Lisp的另一個功能是使用括號將數據組織到列表中。 Lisp中使用的語法或元素是原子和列表。原子是數字,字母和非字母數字字符,列表是原子或其他列表的序列。空格分隔原子和列表,如下所示:

(1 2 3 4)

在此示例中,原子1、2、3和4是列表中標有括號的原子。

(1(2 3 4(5 6)))

在此示例中,第一個列表是原子1,一個由2、3、4組成的列表,以及它自己的由5和6組成的列表。

由於使用了宏且語法解析簡單,因此Lisp被大量用於特定領域,例如人工智能項目。Lisp的工作方式也適用於多種方言。例如,更新的編程語言Clojure以Lisp的方式工作,解決了現代問題,例如同時處理多個請求,最大程度地減少了需要相同資源或需要按特定順序發生的進程間的衝突。這些問題不同於麥卡錫的問題,即創建一種語言來管理人工智能語句和簡單的數學符號系統的語句。


神秘的人工智能語言——Lisp語言


Lisp語言已演變為Common Lisp和Scheme,以及各種方言。它們都以與原始語言規範類似的方式工作。在某些情況下,它們的命名和使用的元素不同。但是它們都使用相同的Lisp概念,包括宏。毫不誇張地說,瞭解Lisp類似於在《星球大戰》中成為絕地武士並獲得輕型軍刀一樣,是比較難的過程。當你學習了至少一種語言後改用Lisp時,Lisp的力量最為明顯。例如,在其他語言設置語言操作方式的基本規則的地方,Lisp則經常讓編碼人員設置規則。在其他語言可能提供許多功能來完成大量任務的地方,Lisp通常可以用較少的功能來完成相同的任務。Lisp活了超過半個世紀,因為程序員不得不承認,十年又十年,Lisp依然是工作的最好工具。


分享到:


相關文章: