stanford-oval/wikipedia huggingface dataset:
Common Lisp
作用域 > 環境 > 動態

環境在Common Lisp中有一種類型是動態環境。在這種環境中建立的綁定具有動態的作用域，這表示某些構造例如let，會在執行的起點就先建立綁定，而在該構造完成執行時消失：它的生命週期依附著這區塊動態地觸發和停用。然而動態綁定不僅在該區塊中可見；對於從該區塊中調用的所有函數也是可見的。這樣的可見性被稱為不定的作用域。具有動態（依附區塊的觸發和停用相關的生命週期）和不定作用域（從該區塊調用的所有函數可見）的綁定，被稱為具有動態作用域。
Common Lisp支援動態作用域的變量，也稱為特殊變量。有些其它類型的綁定也必須是動態作用域的，例如重新啟動和捕獲標籤。函數綁定不能以flet（僅提供詞法範圍的函數綁定）進行動態作用域，但可以將函數物件（Common Lisp中的第一類物件）分配給動態作用域的變量，在動態作用域內使用let綁定，然後再以funcall或APPLY調用。
動態作用域非常有用，因為它將參照的清晰度和規律添加到全局變量中。計算機科學中的全局變量被認為是潛在的錯誤來源，因為它們可能導致模組之間存有特殊隱蔽的溝通渠道，從而導致令人驚訝而不在預期中的交互作用。
在Common Lisp中，只有頂層綁定的特殊變量就像其它編程語言中的全局變量一樣。它可以儲存一個新的值，該值僅替換頂層綁定中的值。造成使用全局變量的核心錯誤，是粗心的替代了全局變量值。但是，使用特殊變量的另一種方法是，在表達式中給它一個新的區域綁定。這有時被稱為“重新綁定”變量。動態作用域中對變量的綁定，會創建一個臨時的新記憶體位置給予該變量，並將該名稱與該位置相關聯。當該綁定有效，對該變量的所有參照都指向新的綁定；之前的綁定則是被隱藏起來的。當綁定表達式的執行結束時，臨時的記憶體位置消失，而舊綁定浮現出來，變量的原始值依舊完好無損。當然，同一變量的多個動態綁定可以嵌套。
在支援多緒的Common Lisp實作中，動態作用域是針對每個執行緒的。因此，特殊變量是當成執行緒區域存儲的抽象化。如果一個執行緒重新綁定了特殊變量，則此重新綁定對其它執行緒中的該變量沒有作用。儲存在綁定中的值只能由創建該綁定的執行緒取得。如果每個執行緒綁定一些特殊變量*x*，則*x*的行為就像執行緒在本地中儲存一樣。在沒有重新綁定*x*的執行緒中，它的行為就像一個普通的全局變量：所有這些執行緒的參照都會指向*x*的頂層綁定。
動態變量可以用來擴展執行上下文，並附加上下文訊息，這些信息在函數之間隱含地傳遞，而不必顯示為額外的函數參數。當執行控制的轉移必須穿過不相關的代碼層時，不能藉由額外參數來擴展傳遞附加數據，所以這是非常有用的。這樣的情況通常需要一個全局變量，必須能夠被儲存和恢復，以便在遞歸時不會中斷：動態變量的重新綁定可以處理此情形。該變量必須是執行緒區域的（或必須使用大的互斥, mutex），因此這個情況不會在執行緒下斷開：動態作用域的實作也可以處理此情形。
在Common Lisp函式庫中有很多標準的特殊變量。例如，所有標準I/O流都儲存在頂層為眾所熟知的特殊變量的綁定中，即*standard-output*。
假設有個foo函數寫入標準輸出：
(defun foo ()
    (format t "Hello, world"))
要擷取其輸出中的字串，*standard-output*可以被綁定到一個字串流，並調用它：
(with-output-to-string (*standard-output*)
    (foo))
-> "Hello, world" ; gathered output returned as a string
作用域 > 環境 > 區域

Common Lisp支援詞法環境。形式上，詞法環境中的綁定具有詞法作用域，並可能具有不定的範圍或動態的範圍，取決於命名空間的類型。詞法作用域實際上表示可見性被限制在綁定建立的區塊中。參照沒有以文本（即詞法地）嵌入在該區塊中，根本看不到該綁定。
TAGBODY中的標籤會具有詞法作用域。如果(GO X)表達式實際上沒有嵌入到其中，則它會發生錯誤。TAGBODY包含標籤X。但是當TAGBODY執行終了時，標籤的綁定就會消失，因為它們具有動態作用域。如果以調用一個詞法閉包重新進入該代碼區塊，那麼這個閉包的內文無法藉由GO將控制轉移到標籤中：
(defvar *stashed*) ;; will hold a function

  (tagbody
    (setf *stashed* (lambda () (go some-label)))
    (go end-label) ;; skip the (print "Hello")
   some-label
    (print "Hello")
   end-label)
  -> NIL
執行TAGBODY時，它首先評估以setf形式指向函數的特殊變量*stashed*，然後(go end-label)將控件轉移到終了標籤，跳過代碼(print "Hello")。由於終了標籤位於TAGBODY的末端，於是終止並返回NIL值。假設現在調用先前指向的函數：
(funcall *stashed*) ;; Error!
這種狀況是錯誤的。一個實作的錯誤回應該包含錯誤條件訊息，例如“GO: tagbody for tag SOME-LABEL has already been left”。該函數嘗試評估(go some-label)，它是詞法地嵌入到TAGBODY中並解析為標籤。然而TAGBODY被跳過了而沒有執行（其作用域已經結束），故無法再轉移控制。
Lisp中的區域函數綁定具有詞法作用域，預設情況下變量綁定也同樣為詞法作用域。與GO標籤對比，它們的作用域是範圍不定的。當一個詞法的函數或變量綁定時，既然可以對其引用參照，該綁定就會持續存在，即使在建立該綁定的結構已經終止後。參照到詞法變量和函數，在其建立結構終止後，可以藉由詞法的閉包來實現。
Common Lisp對於變量的預設模式是詞法綁定。對於個別符號可用區域聲明，或全局的聲明，來切換成動態作用域。而後者可能隱含地透過如DEFVAR或DEFPARAMETER，這樣的構造使符號成為全局可見的。Common Lisp編程中慣例以開頭和結尾星號*，將特殊變量（即處於動態作用域的）包括起來，這稱為“耳罩慣例”。遵循此慣例的效果，即為特殊變量創建了一個單獨的命名空間，則應該處於詞法作用域的變量不會被意外地特殊化。
幾個原因使得詞法作用域有用。
首先，變量和函數的參照可以被編譯成高效的機器碼，因為執行期環境的結構相對簡單。在許多情況下它可以優化堆疊存儲，因此開啟和關閉的詞法作用域前置開銷最小。即使在必定要產生完整閉包的情況下，存取閉包的環境仍然是有效率的；每個變量通常會轉成一個綁定向量之中的偏移量，因此變量的參照就成為簡單的加載，或是以基底-加-偏移尋址模式表示的存儲指令。
其次詞法作用域（與不定範圍結合）可以創造出詞彙閉包，從而產生了中心以函數作為第一類物件的編程範式，這是函數式編程的根本。
第三，也許最重要的是，即使沒有用到詞法的閉包，詞法作用域的運用，會將程序模組與不需要的交互影響隔離開來。由於可見性受到限制，詞法變量是私有的。如果一個模組A綁定一個詞法變量X，並呼叫另一個模組B，則參照B其中的變量X，不會被意外地解析成在A中綁定的X。B根本無法存取X。對於需使用變量進行有規則的交互作用情況，Common Lisp提供了特殊變量。特殊變量允許一個模組A設置變量X的綁定，使另一模組B能看見並從A調用其中的X。能夠做到這一點是個優勢，能夠防止它發生也是個優勢；因此Common Lisp同時支援詞法和動態作用域兩者。
巨集

Common Lisp中的巨集是独一无二的，和C语言中的巨集的机制相同，但是在巨集扩展的过程中由于可以使用所有现有的Common Lisp功能，因此巨集的功能就不再仅限于C语言中简单的文本替换，而是更高级的代码生成功能。巨集的使用形式和函数一致，但是巨集的参数在传递时不进行求值，而是以字面形式传递给巨集的参数。巨集的参数一旦传递完毕，就进行展开。展开巨集的过程将一直进行到这段代码中的所有巨集都展开完毕为止。巨集完全展开完毕后，就和当初直接手写在此处的代码没有区别，也就是嵌入了这段代码上下文中，然后Lisp系统就对完整的代码上下文进行求值。
Lisp巨集表面上類似於函數的使用，但並不是會直接被求值的表達式，它代表程序源碼的字面轉換。巨集將包含的代碼內容當作參數，將它們綁定到巨集自身的參數，並轉換為新的源碼形式。這個新的源碼形式也能夠使用一個巨集，然後重複擴展，直到新的源碼形式沒有再用到巨集。最終形式即運行時所執行的源代碼。
Lisp巨集的典型用途：
新的控制結構（例如：循環結構，分支結構）
作用域和綁定結構
簡化複雜和重複源碼的語法
以編譯時期副作用定義的頂層形式
資料驅動的編程
內嵌式的特定領域語言（例如：SQL，HTML，Prolog）
隱式的結束形式
各種標準的Common Lisp功能也需要巨集來實現，如以下所列：
標準的setf抽象化，允許客製化編譯時賦值/存取運算子的擴展形式
with-accessors, with-slots, with-open-file，與其它相似的WITH巨集
依實作的，cond是建立在基本運算子if之上的巨集；條件分支when和unless也是由巨集所構成
強大的loop迭代巨集語法
巨集是以defmacro來定義。基本運算子macrolet允許定義區域性的（詞法作用域）巨集。也可以使用define-symbol-macro和symbol-macrolet，為符號定義巨集。Paul Graham的《On Lisp》書籍詳細介紹了Common Lisp中巨集的用途。Doug Hoyte的《Let Over Lambda》書籍擴展了關於巨集的討論，聲稱「巨集是lisp編程最獨特的優勢，和任何編程語言的最大優點」。Hoyte提供了迭代開發的幾個巨集範例。
巨集 > 使用巨集定義控制結構的範例

Lisp編程人員能夠利用巨集來創造新的語法形式。典型的用途是創建新的控制結構。

此處提供一個until循環結構的巨集範例，其語法如下：
(until test form*)
until巨集的定義：
(defmacro until (test &body body)
  (let ((start-tag (gensym "START"))
        (end-tag   (gensym "END")))
    `(tagbody ,start-tag
              (when ,test (go ,end-tag))
              (progn ,@body)
              (go ,start-tag)
              ,end-tag)))
tagbody是一個基本的Common Lisp運算子，它提供了命名標籤的能力，並使用go形式跳轉到這些標籤。反引號`的用途類似單引號'（相當於quote函數，引用形式當成資料而不求值），它還是一個可作代碼模板的符號，其中需要求值的形式參數以逗號,開頭填入模板；而以,@符號為開頭的形式參數，其中嵌套的內容會再被拆解評估。tagbody形式測試結束條件。如果條件為真，則跳轉到結束標籤；否則執行主體的代碼，然後跳轉到起始標記。
上述until巨集的使用範例：
(until (= (random 10) 0)
  (write-line "Hello"))
利用macroexpand-1函數可以展開巨集的代碼。上例經過展開後的代碼如下所示：
(TAGBODY
 #:START1136
 (WHEN (ZEROP (RANDOM 10))
   (GO #:END1137))
 (PROGN (WRITE-LINE "hello"))
 (GO #:START1136)
 #:END1137)
在巨集展開期間，變量test的值為(= (random (10) 0)，變量body的值為((write "Hello"))，是一個列表形式。
符號通常會自動轉成英文大寫。這個TAGBODY擴展中帶有兩個標籤符號，由GENSYM自動產生，並且不會被拘束到任何套件中（為待綁定的暫時自由變量）。兩個go形式會跳轉到這些標籤，因為tagbody是Common Lisp中的基本運算子（並不是巨集），因此它沒有其它內容會再展開。展開形式中用到的when巨集也會再展開。將一個巨集完全展開為源代碼的形式，被稱為代碼走開（code walking）。在已被完全展開的形式中，when巨集會被基本運算子if代換：
(TAGBODY
 #:START1136
 (IF (ZEROP (RANDOM 10))
     (PROGN (GO #:END1137))
   NIL)
 (PROGN (WRITE-LINE "hello"))
 (GO #:START1136))
 #:END1137)
源碼中所有包含的巨集必須在展開之後，才能正常地評估或編譯。巨集可以理解為接受和返回抽象語法樹（Lisp S-表達式）的函數。這些函數會在求值器或編譯器調用之前，將巨集內容轉換為完整的源碼，Common Lisp中所提供的任何運算子都可用於編寫巨集。
巨集 > 变量捕捉和覆盖

因为Common Lisp的巨集在展开完毕后就完全嵌入了所处的代码上下文中，相当于以字面形式书写同样的代码，因此在巨集展开代码中与上下文代码中相同的符号就会覆盖上面的引用，称为变量捕捉。如果Common Lisp的巨集展開代碼中的符號，與調用上下文中的符號相同時，通常稱為變量捕捉。對於巨集，程序員可在其中創建具有特殊含義的各種符號。變量捕捉這個術語可能有點誤導，因為所有的命名空間都有非預期捕捉到相同符號的弱點，包括運算子和函數的命名空間、tagbody標籤的命名空間、catch標記，條件處理程序和重新啟動的命名空間。
變量捕捉情況會使軟件產生缺陷，發生原因可分為下列兩種方式：
第一種方式是，巨集擴展可能無意中產生一個符號參照，這個巨集的作者設想符號是在全局命名空間中被解析，但是巨集的展開代碼恰好提供了一個會遮蔽的區域定義，而取用區域定義的參照；此情況稱為類型一捕捉。
第二種方式，類型二捕捉正好相反：巨集的某些參數來自於巨集調用者提供的代碼片段，這些代碼片段被寫入，而且參照周圍的綁定。然而，巨集將這些代碼片段插入到一個展開中，而該展開有自己的綁定定義，這些綁定意外捕捉了這些參照其中的一部份。
Lisp語族的Scheme方言提供了一個巨集寫入系統，它提供了參照透明度來消除這兩種類型的捕捉問題。這樣的巨集寫入系統有時被稱為“保健的”，特別是其支持者（認為不能自動解決捕捉問題的巨集系統是不正確的）。
在Common Lisp中巨集的保健，則以兩種不同方式擔保。
一種方法是使用gensym：保證只產生唯一的符號在巨集擴展中使用，而不受到捕捉問題的威脅。在巨集定義中使用gensym是件零瑣的雜務，但利用巨集可簡便gensym的實例化和使用。gensym很容易解決類型二的捕捉問題，但它們不能以相同方式來處理類型一的捕捉問題，因為巨集展開不能重新命名，周圍代碼中參照所捕捉到的介入符號（被區域定義遮蔽的全局符號）。Gensym可以為巨集擴展所需要的全局符號，提供穩定的別名。巨集擴展使用這些秘密別名而非眾所熟知的名稱，因此重新定義熟知的名稱對巨集並沒有不利影響。
另一種方法是使用套件，在自己套件中定義的巨集，在套件中的擴展可以簡單地使用內部符號。使用套件能處理類型一和類型二捕捉問題。然而，套件不能解決參照到Common Lisp標準函數和運算子的類型一捕捉，因為用套件來解決捕捉問題，只能解析其私有符號（套件中的符號不是導入的，或能被其它套件看見的）；而Common Lisp函式庫的符號都是外部共用的，並經常導入到使用者定義套件中，或在使用者定義套件中是可見的。
以下範例是在巨集展開時，運算子命名空間中發生的不預期捕捉：
;; expansion of UNTIL makes liberal use of DO
 (defmacro until (expression &body body)
   `(do () (,expression) ,@body))

 ;; macrolet establishes lexical operator binding for DO
 (macrolet ((do (...) ... something else ...))
   (until (= (random 10) 0) (write-line "Hello")))
until巨集將展開為一個調用do功能的形式，該形式旨在引用Common Lisp標準的do巨集。但在這種情況下，do可能有完全不同的含義，所以until可能無法正常工作。
Common Lisp禁止對標準運算子和函數的重新定義，避免它們的遮蔽來解決此類問題。因為前例重新定義了do標準運算子，實際上是一個不合格的代碼片段，Common Lisp實作應當對前例進行診斷並拒絕其重新定義。
條件系統

條件系統負責Common Lisp中的異常處理。它提供條件，處理程序和重新啟動。條件是描述異常情況（例如錯誤）的物件。如果一個條件訊號被發出了，Common Lisp系統將搜索此條件類型的處理程序並調用它。處理程序現在可以搜索重新啟動（restart），並使用這些重新啟動之一來自動修復當前的問題，利用條件類型與條件物件的一部份所提供的任何相關資訊等，並調用相對的重新啟動函數。
如果沒有處理程序的代碼，這些重新啟動可以對使用者顯示選項（作為使用者介面的一部分，例如除錯器），讓使用者選擇和調用提供的重新啟動選項。由於條件處理程序在錯誤的上下文中被調用（堆疊仍未清空），在許多情況下對錯誤的完全回復處理是可行的，而不同於其它的異常處理系統可能已經終止了當前的執行程序。除錯器本身也可以使用*debugger-hook*這個動態變量來客製或替換。在unwind-protect中寫明的代碼，譬如作為終結，也會適當地被執行例外。
以下範例（使用 Symbolics Genera）中，使用者從讀取求值打印循環（REPL，即頂層）呼叫一個test函數，嘗試開啟一個檔案，而當此檔案不存在時，Lisp系統則呈現四個重新啟動的選項。使用者選擇了s-B:這個重新啟動選項，並輸入不同的路徑名稱（以lispm-init.lisp取代了lispm-int.lisp）。使用者執行的源碼中並沒有包含任何錯誤處理。整個錯誤處理和重新啟動代碼是由Lisp系統本身所提供，它可以處理和修復錯誤，而不終止使用者執行中的程序碼。
Command: (test ">zippy>lispm-int.lisp")

Error: The file was not found.
       For lispm:>zippy>lispm-int.lisp.newest

LMFS:OPEN-LOCAL-LMFS-1
   Arg 0: #P"lispm:>zippy>lispm-int.lisp.newest"

s-A, <Resume>: Retry OPEN of lispm:>zippy>lispm-int.lisp.newest
s-B:           Retry OPEN using a different pathname
s-C, <Abort>:  Return to Lisp Top Level in a TELNET server
s-D:           Restart process TELNET terminal

-> Retry OPEN using a different pathname
Use what pathname instead [default lispm:>zippy>lispm-int.lisp.newest]:
   lispm:>zippy>lispm-init.lisp.newest

...the program continues
Common Lisp 物件系統(CLOS)

Common Lisp包含了物件導向編程的工具包，Common Lisp物件系統或簡稱為CLOS，它是最強大的物件系統之一。Peter Norvig 解釋了在具備CLOS的動態語言中，如何使用其功能（多重繼承，混合，多方法，元類，方法組合等），以達成設計模式更簡單的實現。曾經有幾個擴展被提出來作為Common Lisp ANSI標準的物件導向編程應用，而最終採用了CLOS作為Common Lisp的標準物件系統。
CLOS是個具有多分派和多重繼承的動態物件系統，並且與靜態語言（如C++ 或Java）中的OOP設施截然不同。作為動態物件系統，CLOS允許在執行時期對泛化函數和類別進行更改。方法可以添加和刪除，類別可以添加和重新定義，物件可依照類別的變動更新，而物件所屬的類別也可以更改。CLOS已經整合到ANSI Common Lisp中。通过函數可以像普通函數一樣使用，並且是第一類資料類型。每個CLOS類別都已被整合到Common Lisp類別系統中。
Common Lisp中許多型別都有一個相對應的類別。規範中沒有說明CLOS實作的條件，CLOS進階用法的可能性並不是Common Lisp的ANSI標準，CLOS的用處有更多的潛能。一般Common Lisp實作將CLOS用於路徑名稱、流、輸入/輸出、條件，CLOS本身等等。
編譯器和直譯器

早期Lisp方言的幾個實現提供了直譯器和編譯器，不幸的是兩者之間語義是不同的。這些早期的Lisps在編譯器中實作了詞法作用域，在直譯器中實作了動態作用域。Common Lisp要求直譯器和編譯器兩者皆預設使用詞法作用域。Common Lisp標準描述了直譯器和編譯器的語義。可以使用compile
函數呼叫編譯器，來編譯各個函數，並使用compile-file函數編譯源碼檔案。Common Lisp允許類型別聲明，並提供產生編譯器代碼的選擇。後者有優化參數可選擇0（不重要）和3（最重要）之間的值：會影響到執行速度，空間，安全性，除錯和編譯速度。
還有一個函數用來評估Lisp源碼：eval。eval將源碼視為預先解析的S-表達式，而不像其它語言只當成字串處理。這樣可以用常見的Lisp函數來建構代碼，用來構造列表和符號，然後以eval函數來評估該代碼。幾個Common Lisp實作（如Clozure CL和SBCL）以它們的編譯器來實現eval。這樣子即使用eval函數進行評估時，源碼也是會被編譯。
使用compile-file函數呼叫檔案編譯器，產生的編譯檔稱為fasl（快速加載，fast load）檔案。這些fasl檔案和源碼檔案都能以load功能，加載到運行的Common Lisp系統中。根據實作，檔案編譯器會產生位元組碼（例如Java虛擬機），C語言代碼（然後以C編譯器編譯）或直接使用原生機器碼。
即使源碼已經完全被編譯，Common Lisp實作可以和使用者互動。因此，Common Lisp的互動介面並非類比於直譯腳本的設想。
這個語言區隔了讀取時期、編譯時期、加載時期和執行時期，並讓使用者編程在需求的步驟中，也依照這些區別來執行所需的處理種類。
有些特殊的運算子特別適合互動式開發；譬如，若defvar還沒有任何綁定時，則只對提供給它的變量進行賦值；而defparameter總是會執行賦值。在實時映像中互動地評估，編譯和載入代碼時，這種區別是有用的。還有一些功能也幫助撰寫編譯器和直譯器。符號由第一類物件所組成，可由使用者的代碼直接操縱。progv基本運算子允許以編程方式創造詞法綁定，也可以運用套件。Lisp編譯器本身在運行時可用來編譯檔案或單一函數，這使得Lisp成為其它編程語言的中途編譯器或直譯器變得容易。
編程源碼範例 > 生日悖論

以下程序計算一個房間內最小數量的人，其完全獨特生日的概率小於 50％（生日悖論，1 人的概率明顯為 100％，2 為 364/365 等）。答案是 23。
;;  By convention, constants in Common Lisp are enclosed with + characters.
(defconstant +year-size+ 365)

(defun birthday-paradox (probability number-of-people)
  (let ((new-probability (* (/ (- +year-size+ number-of-people)
                               +year-size+)
                            probability)))
    (if (< new-probability 0.5)
        (1+ number-of-people)
        (birthday-paradox new-probability (1+ number-of-people)))))
使用REPL呼叫函數用例：
CL-USER > (birthday-paradox 1.0 1)
23
編程源碼範例 > 排序列表

我們定義一個人員類別和一個顯示姓名和年齡的方法。接下來，我們將一組人定義為人物物件列表。然後我們遍歷排序列表。
(defclass person ()
  ((name :initarg :name :accessor person-name)
   (age  :initarg :age  :accessor person-age))
  (:documentation "The class PERSON with slots NAME and AGE."))

(defmethod display ((object person) stream)
  "Displaying a PERSON object to an output stream."
  (with-slots (name age) object
    (format stream "~a (~a)" name age)))

(defparameter *group*
  (list (make-instance 'person :name "Bob"   :age 33)
        (make-instance 'person :name "Chris" :age 16)
        (make-instance 'person :name "Ash"   :age 23))
  "A list of PERSON objects.")

(dolist (person (sort (copy-list *group*)
                      #'>
                      :key #'person-age))
  (display person *standard-output*)
  (terpri))
它以降序打印三個名字。
Bob (33)
Ash (23)
Chris (16)
編程源碼範例 > 平方指數

使用LOOP宏：
(defun power (x n)
  (loop with result = 1
        while (plusp n)
        when (oddp n) do (setf result (* result x))
        do (setf x (* x x)
                 n (truncate n 2))
        finally (return result)))
使用示例：
CL-USER > (power 2 200)
1606938044258990275541962092341162602522202993782792835301376
與內建的求冪函數比較：
CL-USER > (= (expt 2 200) (power 2 200))
T
編程源碼範例 > 查找可用 shell 的列表

WITH-OPEN-FILE是打开一个文件并提供一个串流的宏。在这个形式返回的时候，这个文件自动关闭。FUNCALL调用一个函数对象。LOOP收集匹配谓词的所有行：
(defun list-matching-lines (file predicate)
  "Returns a list of lines in file, for which the predicate applied to
 the line returns T."
  (with-open-file (stream file)
    (loop for line = (read-line stream nil nil)
          while line
          when (funcall predicate line)
          collect it)))
函数AVAILABLE-SHELLS调用上述LIST-MATCHING-LINES函数，并以一个路径名和作为谓词的一个匿名函数作为参数。这个谓词返回一个shell的路径名或NIL（如果这个字符串不是一个shell的路径名）：
(defun available-shells (&optional (file #p"/etc/shells"))
  (list-matching-lines
   file
   (lambda (line)
     (and (plusp (length line))
          (char= (char line 0) #\/)
          (pathname
           (string-right-trim '(#\space #\tab) line))))))
例子结果（在Mac OS X 10.6之上）：
CL-USER > (available-shells)
(#P"/bin/bash" #P"/bin/csh" #P"/bin/ksh" #P"/bin/sh" #P"/bin/tcsh" #P"/bin/zsh")
Common Lisp與Scheme的比较

Common Lisp經常和Scheme互相比較，因為它們是最受歡迎的兩種Lisp方言。Scheme早於CL，不僅來自同一個Lisp傳統，而且是Guy L. Steele與Gerald Jay Sussman設計的，Guy L. Steele也擔任過Common Lisp標準委員會的主席。
Common Lisp是一種普遍用途的的編程語言；相反的如Emacs Lisp和AutoLISP這兩種Lisp的變體，則是嵌入特定產品作為擴展用的語言。與許多早期的Lisps不同，Common Lisp（Scheme同樣）對源碼直譯和編譯時，預設為詞法變量作用域。
大部份Lisp系統（如ZetaLisp和Franz Lisp）的設計，促成了Common Lisp在直譯器中使用動態作用域的變量，並在編譯器中使用了詞法作用域的變量。由於ALGOL 68的啟發，Scheme引入了Lisp對詞法作用域變量的單一使用；這被廣泛認同是好主意。CL也支援動態作用域的變量，但必須將其顯式聲明為“特殊”。ANSI CL直譯器和編譯器之間的作用域界定是沒有差別的。
Common Lisp有時被稱為Lisp-2，而Scheme被稱為Lisp-1。它指的是CL對函數和變量使用個別的命名空間（實際上CL有許多命名空間，例如go標籤，block名稱和loop關鍵字）。在涉及多個命名空間的權衡之間，CL與Scheme倡導者之間存在著長期的爭議。在Scheme中（廣義地）必須避免與函數名稱互相衝突的變量名稱；Scheme函數通常擁有名稱為lis，lst或lyst的參數，以免與系統內建的list函數衝突。然而在CL中，在傳遞函數作為參數時一定要顯式地引用函數的名稱空間，這也是一個常見的事件，如前面小節中的排序編程範例。
在處理布爾邏輯值時，CL也與Scheme不同。Scheme使用特殊值#t和#f來表示邏輯真與假值。而CL遵循使用符號T和NIL的傳統Lisp慣例，NIL同時也是空列表。在CL中任何非NIL值被條件處理為真，例如if；而在Scheme當中，所有非#f值被視為真。這些慣例約定允許這兩種語言的一些運算子同時作為謂詞（回應邏輯上的是非問題），並返回一個作用值進行進一步的計算，但在Scheme的布爾表達式中，等同於Common Lisp空列表的NIL值或'()，會被評估為真。
最後，Scheme的標準文件要求尾部呼叫優化，而CL標準沒有。不過大多數CL實作會提供尾部呼叫優化，雖然通常只在程序員使用優化指令時。儘管如此，常見的CL編程風格並不偏好於Scheme中普遍使用的遞歸樣式- 一個Scheme程序員會使用尾部遞歸表達式，CL使用者則通常會用do，dolist，loop等迭代表達式，或使用iterate套件來表達。
实现

Common Lisp是由一份技术规范定义而不是被某一种具体实现定义（前者的例子有Ada语言和C语言，后者有Perl语言）。存在很多种实现，语言标准详细阐明了可能导致合理歧义的内容。
另外，各种实现试图引入套件或函式库来提供标准没有提及的功能，可能的擴充功能如下所列：
互動式頂層（REPL）
垃圾收集
除錯器，步進器和檢查器
弱資料結構（雜湊表）
可擴展的序列
可擴展的LOOP
環境存取
CLOS元物件協定（meta-object protocol）
基於CLOS的可擴展流
基於CLOS的條件系統
網絡流
固定性CLOS（persistent）
Unicode支援
外語編程介面（經常到C）
作業系統介面
Java介面
多緒和多重處理
應用交付（應用程序，動態函式庫）
儲存映像檔
可移植的自由软件库提供了各种特性，著名的有Common-Lisp.net和Common Lisp Open Code Collection项目。
Common Lisp设计为由增量编译器实现。优化编译的标准声明（例如内联函数）已进入语言规范的计划。大多数Lisp实现将函数编译成原生的机器语言。其他的编译器编译为中间码，有损速度但是容易实现二进制代码的可移植。由于Lisp提供了交互式的提示符以及函数增量式的依次编译，很多人误会为Lisp是纯解释语言。
一些基于Unix的实现，例如CLISP，可以作为脚本解释器使用；因此，系统可以像调用Perl或者Unix shell解释器一样透明地调用它。
实现 > 实现的列表

免费的可重发布实现包括：
CMUCL，最初来自卡内基梅隆大学，现在作为自由软件由一个志愿者团队维护。CMUCL使用一个快速的原生代码编译器。它运行于x86上的Linux和BSD；Alpha上的Linux；以及Solaris、IRIX和HP-UX。
GNU CLISP，是一个bytecode编译的实现。它可移植并运行在很多Unix和Unix风格的系统上（包括Mac OS X），以及Microsoft Windows和一些其他系统。
Steel Bank Common Lisp（SBCL），是CMUCL的一个分支。"宽泛的说，SBCL是CMUCL的可维护性加强版本。"  SBCL运行的平台和CMUCL一样，除了HP/UX，它运行于Windows，PowerPC上的Linux，SPARC，MIPS，和Mac OS X之上。SBCL不使用解释器；所有的语句编译为原生机器码。
GNU Common Lisp（GCL），GNU项目的Lisp编译器。GCL还不是完全兼容ANSI，但它仍然是一些大型项目所选择的实现，包括数学工具Maxima，AXIOM和ACL2。GCL运行在十一种架构的GNU/Linux下，以及Windows，Solaris，和 FreeBSD。
Embeddable Common Lisp（ECL），设计为可嵌入C语言应用中；
Movitz实现了x86上的Lisp环境而不依赖任何OS。
Armed Bear Common Lisp是一个运行在Java虚拟机上的Common Lisp实现。它包括了一个编译器可以编译Javabytecode，并允许Common Lisp调用Java库。Armed Bear Common Lisp是Armed Bear J Editor的一个组件，但它也能独立使用。
Jatha是一个Java库，实现了Common Lisp的大部分子集。
Clozure CL（CCL），可以运行在Mac OS,Linux,FreeBSD,Solaris,以及Windows XP等操作系统上，并且支持x86,PowerPC,ARM等硬件平台。其原名为OpenMCL。
商业实现在Franz, Inc.，Xanalys Corp.，Digitool, Inc.，Corman Technologies和Scieneer Pty Ltd.。
应用

Common Lisp被用于很多成功的商业应用中，最著名的（毫无疑问要归功于Paul Graham的推广）要数Yahoo!商店的站点。其他值得一提的例子有：
Orbitz，以飞机票预订为主的站点
Mirai，Izware LLC's fully integrated 2d/3d computer graphics content creation suite that features what is almost universally regarded as the best polygonal modeler in the industry, an advanced IK/FK and non-linear animation system (later popularized by such products as Sega's Animanium and Softimage XSI, respectively), and advanced 2d and 3d painting. It is used in major motion pictures（most famously in New Line Cinema's Lord of the Rings）, video games and military simulations.
Piano，一个用Lisp写的商业的航空期前期设计包以及与它的竞争对手的比较
Xanalys Corp.的调查软件，被全球的警察，安全部门和防止诈骗服务部门采用
Genworks International的多用途说明语言（GDL），是一个基于CL的开发工具，用来创建基于web的工程，设计和商业应用
也有很多成功的开源应用用Common Lisp写成，例如：
Applicative Common Lisp，a full-featured theorem prover for a subset of Common Lisp.
Maxima，一个精致的计算机代数系统。
Compo，a language allowing complex musical structures to be described in a natural way.
Lisa，a production-rule system to build "intelligent" software agents.
同样，Common Lisp也被许多政府和非盈利组织采用。NASA中的例子有：
SPIKE，the Hubble Space Telescope planning and scheduling system.
Remote Agent，winner of the 1999 NASA Software of the Year Award.
引用

↑  . cmu.edu.   [2021-10-25]. （原始内容存档于2022-03-31）.
↑  . cl-su-ai.lisp.se.   [2021-10-25]. （原始内容存档于2016-04-11）.
↑  Knee-jerk Anti-LOOPism and other E-mail Phenomena: Oral, Written, and Electronic Patterns in Computer-Mediated Communication, JoAnne Yates and Wanda J. Orlikowski., 1993 的存檔，存档日期August 8, 2012，.
↑  Jr, Steele; L, Guy. . Lfp '82. ACM. August 15, 1982: 98–107. ISBN 9780897910828. S2CID 14517358. doi:10.1145/800068.802140.
↑  Richard P. Gabriel; Kent M. Pitman. . Lisp and Symbolic Computation. June 1988, 1 (1): 81–101  [2006-11-06]. S2CID 26716515. doi:10.1007/bf01806178. （原始内容存档于2006-11-13）.
↑  Common-Lisp.net（页面存档备份，存于）
↑  Common Lisp Open Code Collection（页面存档备份，存于）
↑  . www.cons.org.   [2025-01-15]. （原始内容存档于2025-01-26）.
↑  . clisp.sourceforge.io.   [2025-01-15]. （原始内容存档于2025-01-26）.
↑  . sbcl.sourceforge.io.   [2025-01-15]. （原始内容存档于2025-01-30）.
↑  . www.gnu.org.   [2025-01-15]. （原始内容存档于2005-10-13）.
↑  .   [2025-01-15]. （原始内容存档于2007-03-29）.
↑  Graves, Peter. . armedbear.org.   [2025-01-15]. （原始内容存档于2005-10-28）.
↑  . jatha.sourceforge.net.   [2025-01-15]. （原始内容存档于2025-01-15）.
↑  . www.clozure.com.   [2025-01-15]. （原始内容存档于2025-01-02）.
↑  . franz.com.   [2025-01-15]. （原始内容存档于2025-01-30） （英语）.
↑  . www.lispworks.com.   [2025-01-15]. （原始内容存档于2025-01-20）.
↑  .   [2025-01-15]. （原始内容存档于2008-12-16）.
↑  .   [2025-01-15]. （原始内容存档于2005-10-25）.
↑  .   [2025-01-15]. （原始内容存档于2005-03-08）.
↑  Orbitz（页面存档备份，存于）
↑  Mirai（页面存档备份，存于）
↑  Izware LLC（页面存档备份，存于）
↑  Piano（页面存档备份，存于）
↑  Xanalys Corp.（页面存档备份，存于）
↑  Genworks International（页面存档备份，存于）
↑  Applicative Common Lisp（页面存档备份，存于）
↑  Compo
↑  Lisa（页面存档备份，存于）
↑  SPIKE
↑  Remote Agent（页面存档备份，存于）
C8H16O2

| 同系物导航 |
| --- | --- | --- |
|  | C8H18O2 |  |
| C7H14O2 | C8H16O2 | C9H18O2 |
|  | C8H14O2  |  |
| C8H16O |  | C8H16O3 |
化学式C8H16O2（摩尔质量：144.21 g/mol）可指：
酸

辛酸，CAS号：124-07-2
2-乙基己酸，混合CAS号：149-57-5
丙戊酸，CAS号：99-66-1
酯

己酸乙酯，CAS号：123-66-0
母菊酯（2-甲基戊酸乙酯），CAS号：39255-32-8
戊酸丙酯，CAS号：624-54-4
戊酸异丙酯（世界语：），CAS号：18362-97-5
异戊酸异丙酯（世界语：），CAS号：32665-23-9
丁酸丁酯，CAS号：109-21-7
丁酸异丁酯，CAS号：539-90-2
丁酸仲丁酯，CAS号：819-97-6
异丁酸丁酯，CAS号：97-87-0
异丁酸异丁酯（德语：），CAS号：97-85-8
丙酸戊酯，CAS号：624-54-4
丙酸异戊酯，CAS号：105-68-0
乙酸正己酯，CAS号：142-92-7
其它

2,2,4,4-四甲基-1,3-环丁二醇，CAS号：3010-96-6
1,4-环己烷二甲醇，CAS号：105-08-8
以色列交通与道路安全部

以色列交通与道路安全部（希伯来语：משרד התחבורה, התשתיות הלאומיות והבטיחות בדרכים‬），以色列政府内阁机构之一，负责以色列交通运输及道路安全事宜。以色列交通与道路安全部办公地位于耶路撒冷吉瓦特拉姆。现任部长空缺中。
报恩寺塔 (苏州市)

31°19′28″N 120°36′55″E﻿ / ﻿31.32444°N 120.61528°E﻿ / 31.32444; 120.61528
关于其它地方的同名塔，请见报恩寺塔、北寺塔
| 报恩寺塔 |
| --- | --- |

全国重点文物保护单位 中华人民共和国国务院公布
地址: 江苏省苏州市
分类: 古建筑
时代: 宋至清
编号: 6-514
认定时间: 2006年5月25日
报恩寺塔，位于中国江苏省苏州市姑蘇區人民路652号报恩寺内，俗称北寺塔，是楼阁式塔，砖木结构。有“吴中第一古刹”的称号。2006年被列入第六批全国重点文物保护单位名单。
历史

三国东吴赤乌年间，孙权为报答母亲吴太夫人的养育之恩，建“通玄寺”。南朝·梁中大通四年（532年）建十一层塔。唐开元二十六年（734年），通玄寺易名“开元寺”。后唐同光三年，吴越王钱镠另建开元寺于盘门瑞光塔旁，后周显德年间，钱镠移支硎山报恩寺额于原开元寺址，从此定名为报恩寺。 南宋绍兴二十三年（1153年）改建成八面九层塔，砖身木檐，高76米，底层飞檐四出，保存至今。曾经长期是苏州最高的建筑物。
交通

苏州轨道交通4号线北寺塔站
图册

文物保护碑
七佛宝殿.2021
梅圃.2021
参考来源

↑  .   [2011-02-21]. （原始内容存档于2016-03-04）.
↑  . 华人时刊. 2004, (12): F002  [2011-02-21]. （原始内容存档于2019-05-09）.
黃山侍從室

黃山侍從室位於重慶市南岸區黃山，文物遺址年代為1938--1945年。1992年3月19日列為重慶市第二批市級文物保護單位。 2000年9月7日列為第一批重慶市文物保護單位。2013年3月5日列為第七批全國重點文物保護單位。
侍從室是國民政府軍事委員會委員長蔣中正先生的貼身辦事機構，共設有3個處：第一處掌軍事．也是侍從室事務最繁、職權最大的一個處；第二處掌管政治和蔣介石的秘書工作，主任是陳布雷；第三處，主任陳果夫，專管黨務。黃山侍從室由兩幢房屋組成，分別稱為侍從室-1和侍從室-2。另在城內有德安里104號侍從室。
註釋

↑  重慶市人民政府文件，重府發〔1992〕52號
↑  「重慶市人民政府關於公布第一批重慶市文物保護單位的通知」，渝府發[2000]83號，2000年9月7日
↑  『國務院關於核定並公布第七批全國重點文物保護單位的通知』，國發〔2013〕13號，2013年3月5日
↑  黃曉東，張榮祥主編；艾智科，石麗敏副主編；陶昕，楊雨，張莉，夏伙根等編，《重慶抗戰遺址遺蹟保護研究》，重慶出版社，2013.06，第220-229頁
|  论 编重庆市境内的全国重点文物保护单位 |
| --- | --- |
渝中区:  八路军重庆办事处旧址 红岩村13号  曾家岩50号  中共代表团驻地旧址  《新华日报》营业部旧址  桂园  重庆湖广会馆  老鼓楼衙署遗址  重庆古城墙  特園  国民政府立法院、司法院及蒙藏委员会旧址  重慶国民政府外交部旧址  重庆抗战金融机构旧址群  國民參政會舊址  国民政府行政院旧址  同盟国中国战区统帅部参谋长官邸旧址  保卫中国同盟总部旧址  重庆谈判旧址群  抗战胜利纪功碑暨人民解放纪念碑  重庆市人民大礼堂  国民政府军事委员会政治部第三厅暨文化工作委员会旧址（天官府8号）  同盟國駐渝外交機構舊址群 蘇聯大使館舊址  蘇聯大使館武官處舊址  美國大使館舊址  英國大使館舊址  中英聯絡處舊址  法國領事館舊址  澳大利亞公使館舊址  土耳其公使館舊址  罗斯福图书馆旧址 
沙坪坝区:  “中美合作所”集中营旧址  国民政府军事委员会政治部旧址  重慶林园  国民政府军事委员会政治部第三厅暨文化工作委员会旧址（全家院子）  重慶抗戰兵器工業舊址群 兵工署第二十四兵工廠舊址  兵工署第二十五兵工廠舊址  重庆大学早期建筑 
北碚区:  中国西部科学院旧址  嘉陵江三峡乡村建设旧址群 峽防局旧址  红楼  清涼亭  柏林楼  数帆楼  农庄  磐室  竹楼  中國鄉村建設學院舊址  花房子  世界佛学苑汉藏教理院旧址  张自忠将军墓 
南岸区:  弹子石摩崖造像  重庆黄山抗战旧址群  同盟国驻渝外交机构旧址群 南山蘇聯大使館舊址  法國大使館舊址  美國大使館海軍武官處舊址  美軍招待所  法國水師兵營舊址  印度專員公署舊址 
江北区:  重庆抗战兵器工业旧址群 兵工署第五十兵工廠抗戰生產洞  兵工署第十兵工廠舊址 
巴南区:  南泉抗战旧址群 
合川区:  钓鱼城遗址  涞滩二佛寺摩崖造像  育才学校旧址 
江津区:  石门大佛寺摩崖造像  聂荣臻故居 
潼南县:  潼南大佛寺摩崖造像 千佛寺摩崖造像  杨氏民宅  独柏寺正殿 
大足区:  北山摩崖造像 佛灣摩崖造像  觀音坡摩崖造像  佛耳峰  營盤山  南山摩岩造像  石篆山摩岩造像  多寶塔  妙高山摩崖造像  舒成岩摩崖造像  宝顶山摩崖造像 大佛灣摩崖造像  小佛灣摩崖造像  廣大山摩崖造像  龍潭摩崖造像  松林坡摩崖造像  石門山摩崖造像 
忠县:  石宝寨  丁房阙-无铭阙 
涪陵区:  白鹤梁题刻 
丰都县:  高家镇遗址  重庆冶锌遗址群  汇南墓群 
奉节县:  白帝城  瞿塘峡摩崖石刻  白帝城遗址 
云阳县:  张桓侯庙  彭氏宗祠 
巫山县:  龙骨坡遗址  玉米洞遗址 
酉阳县:  赵世炎故居  南腰界红三军司令部旧址 
万州区:  天生城遗址  西山钟楼  瀼渡电厂 
巫溪县:  荆竹坝岩棺群  大宁盐场遗址 
梁平县:  双桂堂 
开县:  刘伯承故居 
九龍坡區:  重慶抗戰兵器工業舊址群 兵工署第一兵工廠抗戰生產洞 
大渡口區:  重慶抗戰兵器工業舊址群 鋼鐵廠遷建委員會生產車間舊址 
綦江區:  重慶抗戰兵器工業舊址群 航空委員會第二飛機製造廠海孔洞生產車間 
石柱土家族自治县:  湾底谭氏民居 
参见：重庆市文物保护单位 (直辖市级)各省全国重点文物保护单位索引：京 · 津 · 冀 · 晋 · 蒙 · 辽 · 吉 · 黑 · 沪 · 苏 · 浙 · 皖 · 闽 · 赣 · 鲁 · 豫 · 鄂 · 湘 · 粤 · 桂 · 琼 · 渝 · 川 · 贵 · 云 · 藏 · 陕 · 甘 · 青 · 宁 · 新
丁房雙闕

丁房雙闕位于重庆市忠县忠州街道白公祠内。建于东汉。双阙之间相距2.4米，东阙为子母阙，子阙无盖，总高6.26米；西阙无子阙，高5.55米。
原位于忠州镇人民路，因三峽水庫的建設，2003年2月与㽏井溝無銘闕一同搬遷至白公祠內。
1956年8月16日公佈為四川省第一批歷史及革命文物保護單位。1980年7月7日重新公佈為四川省第一批文物保護單位。2000年9月7日列為第一批重慶市文物保護單位。2001年6月25日列為第五批全國重點文物保護單位。
历史

丁房闕在忠縣東門外土主廟前。清道光六年《忠州直隸州志》引《碑目考》云：「丁房雙闕在臨江縣巴王廟，有二闕相對峙。闕高兩丈、為層觀，飛檐袤裒，四方多刻人物。皆極巧妙。諸刻漫滅，僅有漢丁房等字，尚可辨也。」。以六層石墩砌成，闕身略呈正方形。蓋為重檐檐下刻檐椽，將飛檐桃出，檐上刻筒瓦板瓦，翼角微微翹起。又於上重檐下施以斗拱兩朵，斗棋之間刻半開門狀，刻一少女現半身倚立其中。還有浮雕人物、車馬、獸類等。刻工精細古樸，原刻字跡已漫滅不全。右闕下層為後人整修，上刻有明萬曆知州賀國禎『巴國忠貞祠銘』，清康熙武烈倪伯鯕『忠貞祠銘』和成文運『忠貞祠銘』，道光吳友篪等重修忠烈祠銘。
丁房闕的名稱來源於宋人，王象之《輿地紀勝·碑記》云：「在臨江縣巴王廟。有丁房雙闕，對峙廟庭，高可二丈。」。宋人著錄中說丁房闕在巴王廟前，而方誌記載，巴王廟宋稱永順祠，明至清初改稱忠貞祠，清中葉以後改名土主廟。可見宋人所記是宋以前的名稱，而不是當時名稱。巴王廟是紀念巴蔓子的紀念性寺廟，其時代在當東漢末至三國這段時間。巴王廟的名稱雖然幾經變革，但丁房闕卻始終峙立於廟前。因此，丁房闕當為廟闕。
丁房闕為雙闕，兩闕並排坐北向南，相距2.46米。仿木重檐廡殿式結構，以石重疊砌築而成。東闕為子母闕，母闕高6.26米，子闕高2.16米，分別由闕基、闕身、闕頂等部分組成。西闕為單體闕，高5.5米，長其結構與東闕大致相同。兩闕已經後代修葺、補刻，其石材也不盡一致。1953年由忠縣人民政府拔款修建了座單檐磚木結構的建築物將其遮蓋保護。丁房闕為一雙闕，左闕配有耳闕，而右闕卻只有主闕，左闕闕身二層的三面浮雕，既非漢刻風格，也非漢時內容；闕上的鋪首、角神，也與漢風迥然不同。闕身明萬曆《巴國忠貞祠銘》，其中記載有「毗左闕圮」，可見左闕系倒塌後重建的。又《蜀中名勝記·重慶府·忠州》中記載「右邊闕就圮，近日為有司者新之，了非故物」，可見右闕也進行過整體的維修。據調査，其二層以上的腰檐、樓部、頂蓋等極有可能均非原物，是按照左闕模式仿刻而成的，且漏配了耳闕。從總體上看，圖紋、人物、花草、鳥獸圖案，具明顯的明代風格，因此現存闕身為明代重建的。
銘文 > 『巴國忠貞祠銘』（賀國禎）

昔在周季，列國紛爭，維我蔓公，守此巴人，敵至力竭，援兵楚鄰
許以城償，既獲謐寧，楚王狥信，遣使來請，我公刎首，付使留城
楚王感說，忠烈魂驚，塟以王禮，千古垂名，歷代以來，石闕在門
右碑忽圯，守土聿新，願言篤祜，佑此忠民。忠州忠州，維神是稱
子孝臣忠，萬載長馨
萬曆丙辰歲仲春之吉
忠州知州賀國禎重修
學正王良卿
訓導彭嘉賢
臨江巡檢柳文憲
遞運所大使徐朝聘
花林驛丞胡雋
漕溪驛丞張諲
齊江巡檢余先見同立，□□□□□
銘文 > 『忠貞祠銘』（倪伯麒常熟人）

維茲忠郡，峨峨俯江，襟帶涪萬，輝映井梁。有神烜赫，隆號巴王，禦災捍患，崇祀鄉邦。百年圮蝕，侵沒豪強，曰予治之，廟貌重光。隆碣在上，雙闕在傍，作鎮作固，地久天長。
銘文 > 『重修巴國忠貞祠銘』（成文運）

於維蔓公正氣高風舍身取義亘古靡同為國為民澤被無窮
報以王禮禋祀城東甲申兵燹遺蹤蒿蓬留城城在亨祀祀空
士民隕涕無力鳩工幸值守土父母
武公捐貲重建廟像崇隆黎老懷仁子弟作忠一日千古在在編
氓惟茲民牧何去何從
大清康熙甲戌歲□□
忠州知州武□烈重修
□□□生
督工吏房典史
法国人让·拉蒂格（法语：）摄于1923年
参考资料

↑  . 文物出版社. 2004: 52. ISBN 7-5010-1525-2.
↑  . 重庆市文化和旅游发展委员会. 2015-04-28  [2023-04-29]. （原始内容存档于2023-04-29）.
↑  四川省人民委员会.  . 维基文库. 1956-08-16 （中文）.
↑  四川省人民政府.  . 维基文库. 1980-07-07 （中文）.
↑  重庆市人民政府.  . 维基文库. 2000-09-07 （中文）.
↑  . 中华人民共和国国务院. 2001-06-25. （原始内容存档于2020-01-28）.
↑  《長江三峽工程淹沒及遷建區文物古蹟保護規劃報告綜合卷》，中國三峽出版社，2010.03，第148頁
宋英奎

| 宋英奎> 男演员 |
| --- | --- |
罗马拼音: Song Young-Kyu
国籍:  
出生:  (1970-04-18) 1970年4月18日（54歲）  
职业: 演員
语言: 韓語
教育程度: 首爾藝術大學演劇系
出道日期: 1994年
出道作品: 音乐剧《毛发道士》
活跃年代: 1994年至今
经纪公司: Management Koo（2024年—）

宋英奎（韓語：，1970年4月18日—），韓國男演員。1994年通过儿童音乐剧《毛发道士》出道，此后参演过音乐剧《悲惨世界》《小王子》《杰克与海德》、电影《断箭》《素媛》《极限职业》、电视剧《請回答1988》《棒球大联盟》《鬣狗》等多部作品。2021年起担任韩国世明大学表演艺术系特任教授。