跳轉至內容

Ada 程式設計/所有運算子

來自華夏公益教科書,開放世界的開放書籍



奧古斯塔·阿達·金,洛夫萊斯伯爵夫人。

運算子

標準運算子

Ada 允許所有標準運算子的 運算子過載,因此以下摘要只能描述每個運算子的建議標準運算。完全有可能濫用任何標準運算子來執行不尋常的操作。

每個運算子都是一個 關鍵字 或一個 分隔符 — 因此所有運算子頁面都重定向到相應的 關鍵字分隔符

運算子具有引數,在 RM 中被稱為二元運算子的左和右,一元運算子的右(指示相對於運算子符號的位置)。

列表按從最低優先順序到最高優先順序排序。

邏輯運算子

and
and , (也為關鍵字 and)
or
or , (也為關鍵字 or)
xor
異或 , (也為關鍵字 xor)

關係運算符

/=
不等於 , (也為特殊字元 /=)
=
等於 , (也為特殊字元 =)
<
小於 , (也為特殊字元 <)
<=
小於或等於 (), (也為特殊字元 <=)
>
大於 (), (也為特殊字元 >)
>=
大於或等於 (), (也為特殊字元 >=)

二元加運算子

+
, (也為特殊字元 +)
-
, (也為特殊字元 -)
&
連線, & (也稱為特殊字元&)

一元加運算子

+
加號(也稱為特殊字元+)
-
減號(也稱為特殊字元-)

乘法運算子

*
乘法,(也稱為特殊字元*)
/
除法(也稱為特殊字元/)
mod
模數(也稱為關鍵字mod)
rem
餘數(也稱為關鍵字rem)

最高優先順序運算子

**
(也稱為特殊字元**)
not
邏輯非(也稱為關鍵字not)
abs
絕對值 (也稱為關鍵字abs)

短路控制形式

這些不是運算子,因此不能過載。

and then
例如 if Y /= 0 and then X/Y > Limit then ...
or else
例如 if Ptr = null or else Ptr.I = 0 then ...

成員資格測試

成員資格測試也不能過載,因為它們不是運算子。

in
元素,例如 if I in Positive then(也稱為關鍵字in)
not in
非元素,例如 if I not in Positive then(也稱為關鍵字not in)

範圍成員資格測試

if Today not in Tuesday .. Thursday then
   ...

子型別成員資格測試

Is_Non_Negative := X in Natural;

類成員資格測試

exit when Object in Circle'Class;

範圍成員資格測試

if Today not in Tuesday .. Thursday then
   ...

選擇列表成員資格測試

此語言特性已在Ada 2012中引入。

Ada 2012 將成員資格測試擴充套件到包括多個範圍或值選擇的並集(短路或)。

if Today in Monday .. Wednesday | Friday then
   ...

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


Ada 運算子
and and then > + abs &
or or else >= - mod
xor = < * rem in
not /= <= ** / not in


運算子:&

作為運算子

連線陣列

function "&" (Left, Right : T) return T;

任何陣列型別 (包括固定字串) 可以使用 & 運算子連線。您也可以將單個元素追加到陣列。

常見的非標準操作

連線字串

& 運算子也定義為 Bounded_String 和 Unbounded_String。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子:**

運算子

標準操作

算術冪

"**" 運算子定義為所有數值型別的算術冪。

function "**" (Left : T; Right : Integer) return T;
用法
A : constant Float   := 5.0 ** 2;  -- A is now 25.0
B : constant Integer := 5 ** 2;    -- B is also 25
工作示例
檔案:operator_power.adb (檢視純文字下載頁面瀏覽所有)
with Ada.Text_IO;

procedure Operator_Power is
   A : constant Float   := 5.0 ** 2;  -- A is now 25.0
   B : constant Integer := 5 ** 2;    -- B is also 25

   package T_IO renames Ada.Text_IO;
   package F_IO is new  Ada.Text_IO.Float_IO (Float);
   package I_IO is new  Ada.Text_IO.Integer_IO (Integer);

begin
   T_IO.Put ("A = ");
   F_IO.Put (
      Item => A,
      Fore => 3,
      Aft  => 1,
      Exp  => 0);
   T_IO.New_Line;
   T_IO.Put ("B = ");
   I_IO.Put (
      Item  => B,
      Width => 3,
      Base  => 10);
   T_IO.New_Line;
end Operator_Power;

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子:*

運算子

標準操作

算術乘法

"*" 運算子定義為所有數值型別的算術乘法。

function "*" (Left, Right : T) return T;
用法
A : constant Float   := 5.0 * 2.0;  -- A is now 10.0
B : constant Integer := 5 * 2;      -- B is also 10
工作示例
檔案: operator_multiply.adb (檢視, 純文字, 下載頁面, 瀏覽所有)
with Ada.Text_IO;

procedure Operator_Multiply is
   A : constant Float   := 5.0 * 2.0;  -- A is now 10.0
   B : constant Integer := 5 * 2;      -- B is also 10

   package T_IO renames Ada.Text_IO;
   package F_IO is new  Ada.Text_IO.Float_IO (Float);
   package I_IO is new  Ada.Text_IO.Integer_IO (Integer);

begin
   T_IO.Put ("A = ");
   F_IO.Put (
      Item => A,
      Fore => 3,
      Aft  => 1,
      Exp  => 0);
   T_IO.New_Line;
   T_IO.Put ("B = ");
   I_IO.Put (
      Item  => B,
      Width => 3,
      Base  => 10);
   T_IO.New_Line;
end Operator_Multiply;

常用非標準操作

字元重複

建立一個字串,其中單個字元重複 n 次。

function "*" (Left : Natural; Right : Character) return String;

除了標準字串之外,此 運算子 也為 Bounded_String 和 Unbounded_String 定義。

用法
A : constant String := 10 * 'X';  -- A is filled with 10 X
工作示例

字元重複 運算子Ada.Strings.Fixed 的一部分。你需要withuse 包以使 運算子 可見。

檔案: operator_multiply_2.adb (檢視, 純文字, 下載頁面, 瀏覽所有)
with Ada.Text_IO;
with Ada.Strings.Fixed;

procedure Operator_Multiply_2 is
   use Ada.Strings.Fixed;

   A : constant String := 10 * 'X';  -- A is filled with 10 X

   package T_IO renames Ada.Text_IO;

begin
   T_IO.Put_Line ("A = " & A);
end Operator_Multiply_2;

字串重複

建立一個字串,其中源字串重複 n 次。

function "*" (Left : Natural; Right : String) return String;

除了標準固定字串之外,此 運算子 也為 Bounded_String 和 Unbounded_String 定義。

用法
A : constant String := 3 * "Hello ";  -- A is filled with 3 Hello
工作示例

字串重複 運算子Ada.Strings.Fixed 的一部分。你需要withuse 包以使運算子可見。

檔案: operator_multiply_3.adb (檢視, 純文字, 下載頁面, 瀏覽所有)
with Ada.Text_IO;
with Ada.Strings.Fixed;

procedure Operator_Multiply_3 is
   use Ada.Strings.Fixed; 

   A : constant String := 3 * "Hello ";  -- A is filled with 3 Hello.

   package T_IO renames Ada.Text_IO;

begin
   T_IO.Put_Line ("A = " & A);
end Operator_Multiply_3;

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: -

運算子

標準操作

算術減法

“-”運算子被定義為所有數值型別上的算術減法。

function "-" (Left, Right : T) return T;
用法
A : constant Float   := 5.0 - 2.0;  -- A is now 3.0
B : constant Integer := 5 - 2;      -- B is also 3

減號

“-” 一元運算子被定義為所有數值型別上的算術負號。

function "-" (Left : T) return T;
用法
A : constant Float   := -5.0;
B : constant Integer := -5;
C : constant Integer := -B;  -- C is now 5

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: /=

運算子

運算子 /= 在不等式上比較兩個值。它被預定義為所有非 限制類型。如果存在合適的 運算子 =,則該運算子也會被定義。

請注意,在 Ada 中,此運算子的表示方式是選擇用於類似數學符號 ,以與 <= 類似 ,或 >= 類似 的方式。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: /

運算子

標準操作

算術除法

“/”運算子被定義為所有數值型別上的算術除法。

function "/" (Left, Right : T) return T;
用法
A : constant Float   := 5.0 / 2.0;  -- A is now 2.5
B : constant Integer := 5 / 2;      -- B is also 2

另請參閱

華夏公益教科書

Ada 參考手冊


運算子: =

運算子

運算子 = 在相等性上比較兩個值。它被預定義為所有非 限制類型

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: abs

此關鍵字用於獲取數字的 絕對值運算子

y := abs x;

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子: and

邏輯運算子

布林運算子

X : Boolean := A > 10 and A < 20;

布林快捷運算子

快捷運算子用於使布林表示式的部分的計算有條件:and thenor else。這永遠不應該用來加速計算(對於現代最佳化編譯器,它可能不會有這種效果)。正確用法是防止計算已知會引發異常的表示式。

if Dog /= null and then G (Dog) then
   Walk (Dog);
end if;

在上面的例子中,G (Dog)僅當指標Dog不是null時才會被呼叫,也就是說它實際上指向某些東西。

實際上,and thenor else 在參考手冊的意義上不是運算子,它們被稱為“短路控制形式”。區別在於(true)運算子可以被重新定義(即過載),而這些運算子不能。但是,它們被定義為任何布林型別。

由於 Ada 允許平行計算表示式的引數,因此快捷運算子不是計算布林表示式的標準方法。在最終計算結果保證相同的情況下,編譯器可以採用快捷計算。

陣列上的布林運算子

and 運算子應用於來自左側和右側陣列的每對布林元素。結果與左側運算元具有相同的邊界。

type Day_Of_Month is range 1 .. 31;            
type Month_Array is array (Day_Of_Month) of Boolean;

X : Month_Array := Function_1;
Y : Month_Array := Function_2;
Z : Month_Array := X and Y;

按位運算子

運算子 and 可以與 模型別 一起使用來執行按位運算。

為標記型別新增介面

此語言功能僅從 Ada 2005 開始可用。

type Programmer is new Person 
                   and Printable
with 
   record
     Skilled_In : Language_List;
   end record;

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子: >=

運算子

運算子 >= 在大於或等於上比較兩個值。它被預定義為所有離散型別。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: >

運算子

運算子 > 在大於上比較兩個值。它被預定義為所有離散型別。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: in

此關鍵字用於

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子: <=

運算子

運算子 <= 在小於或等於上比較兩個值。它被預定義為所有離散型別。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: <

運算子

運算子 < 在小於上比較兩個值。它被預定義為所有離散型別。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子: mod

此關鍵字用於 mod 運算子模型別 的宣告中。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子: not

此關鍵字用於

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子: or

邏輯運算子

布林運算子

X : Boolean := A < 10 or A > 20;

布林快捷運算子

在下面的示例中,函式G僅當F(X)返回 False 值時才會被呼叫。

if F(X) or else G(Y) then

    Walk_The_Dog;
 
end if;

此快捷運算子有時用於加速布林表示式的計算,但 Ada 風格指南建議在切換到另一個之前比較兩種形式的效能。一般來說,在第二種表示式涉及函式呼叫時,使用or else 以提高效能是一個好主意。

or else 表單也用於當第二個表示式已知會引發異常,除非第一個表示式為 False

與 C/C++ 不同,Ada 快捷運算子不是計算布林表示式的標準方法。這是因為 Ada 預設情況下旨在執行通常更安全的計算,但允許程式設計師請求不同的行為。

陣列上的布林運算子

or 運算子應用於來自左側和右側陣列的每對布林元素。結果與左側運算元具有相同的邊界。

type Day_Of_Month is range 1 .. 31;            
type Month_Array is array (Day_Of_Month) of Boolean;

X : Month_Array := Function_1;
Y : Month_Array := Function_2;
Z : Month_Array := X or Y;

按位運算子

運算子 or 可以與 模型別 一起使用來執行按位運算。

選擇語句

備選方案

參見 Ada 程式設計/任務#選擇性等待.

延遲

參見 Ada 程式設計/任務#超時.

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子:+

運算子

標準操作

算術加法

“+”運算子被定義為所有數值型別的算術加法。

function "+" (Left, Right : T) return T;

加號

“+”運算子被定義為所有數值型別的算術加號。

function "+" (Right : T) return T;
用法
A : constant Float   := +5.0;  -- A is now 5.0
B : constant Integer := +5;    -- B is also 5

常用非標準操作

型別轉換

加號運算子通常用於建立型別轉換運算子

function "+" (Left : T1) return T2;

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊


運算子:rem

運算子 rem

rem 關鍵字用作餘數運算子,即帶符號整數除法的餘數。 以下公式適用

A = (A / B) * B + (A rem B)

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


運算子:xor

邏輯運算子

布林運算子

X : Boolean := A = 10 xor B = 10;

陣列上的布林運算子

xor 操作應用於 陣列 中的每個布林值。

type Day_Of_Month is range 1 .. 31;            
type Month_Array is array (Day_Of_Month) of Boolean;

X : Month_Array := Function_1;
Y : Month_Array := Function_2;
Z : Month_Array := X xor Y;

按位運算子

xor 運算子可用於 模型別 以及布林 陣列 以執行按位操作。

另請參閱

華夏公益教科書

Ada 95 參考手冊

Ada 2005 參考手冊

Ada 質量和風格指南


GNU 自由文件許可證

1.3 版,2008 年 11 月 3 日 版權所有 (C) 2000、2001、2002、2007、2008 自由軟體基金會,Inc. <http://fsf.org/>

任何人都被允許複製和分發此許可證文件的逐字副本,但更改它是不允許的。

0. 前言

本許可證的目的是使手冊、教科書或其他功能性和有用的文件在自由的意義上“自由”:確保每個人都擁有有效地複製和重新分發它的自由,無論是否對其進行修改,無論是在商業上還是非商業上。 其次,本許可證為作者和出版者保留了一種獲得其作品認可的方式,同時不被視為對其作品的修改負責。

本許可證是一種“複製許可”,這意味著文件的衍生作品本身必須在相同的意義上是免費的。 它補充了 GNU 通用公共許可證,這是一種為自由軟體設計的複製許可。

我們設計了這個許可證以便將其用於自由軟體的手冊,因為自由軟體需要免費文件:一個自由程式應該附帶提供與軟體相同自由的手冊。 但是本許可證不限於軟體手冊; 它可以用於任何文字作品,無論主題是什麼,也不管它是否作為印刷書籍出版。 我們主要建議將本許可證用於目的在於指導或參考的作品。

1. 適用範圍和定義

本許可證適用於任何包含版權所有者放置的宣告其可以根據本許可證條款分發的通知的任何媒介的手冊或其他作品。 這種通知授予全球範圍內、免版稅的、期限不受限制的許可證,以便在本文中規定的條件下使用該作品。 下面的“文件”是指任何此類手冊或作品。 公眾中的任何成員都是許可證持有者,並被視為“你”。 如果您以需要版權法許可的方式複製、修改或分發作品,則您接受該許可證。

“修改版”文件是指包含文件或其部分的任何作品,無論是以逐字複製的方式,還是進行修改和/或翻譯成另一種語言。

“二級部分”是指文件的命名附錄或前言部分,該部分專門處理文件出版者或作者與文件的總體主題(或相關事項)之間的關係,並且不包含任何可能直接屬於該總體主題的內容。 (因此,如果文件部分是數學教科書,則二級部分不能解釋任何數學內容。)這種關係可能是與主題或相關事項的歷史聯絡,或與法律、商業、哲學、道德或政治立場有關。

“不變部分”是某些二級部分,其標題被指定為不變部分的標題,在宣告文件根據本許可證釋出的通知中。 如果某個部分不符合上述二級部分的定義,則不允許將其指定為不變部分。 文件可能包含零個不變部分。 如果文件沒有標識任何不變部分,則沒有不變部分。

“封面文字”是指在宣告文件根據本許可證釋出的通知中列出的某些簡短的文字段落,作為封面文字或封底文字。 封面文字最多可包含 5 個詞,封底文字最多可包含 25 個詞。

“透明”文件副本是指機器可讀副本,以規範對公眾公開的格式表示,該格式適合使用通用文字編輯器(對於由畫素組成的影像)通用繪製程式或(對於圖形)一些廣泛使用的繪圖編輯器直接修改文件,並且適合輸入文字格式器或自動翻譯成適合輸入文字格式器的各種格式。 以其他方式透明的檔案格式製作的副本,其標記或沒有標記已安排為阻止或阻止讀者隨後進行修改,不是透明的。 如果用於大量文字,則影像格式不是透明的。 不是“透明”的副本稱為“不透明”副本。

適用於透明副本的格式示例包括沒有標記的純 ASCII、Texinfo 輸入格式、LaTeX 輸入格式、使用公開可用的 DTD 的 SGML 或 XML,以及符合標準的簡單 HTML、PostScript 或 PDF,這些格式旨在供人類修改。 透明影像格式的示例包括 PNG、XCF 和 JPG。 不透明格式包括僅透過專有文字處理程式才能讀取和編輯的專有格式,SGML 或 XML,其 DTD 和/或處理工具通常不可用,以及一些文字處理程式為輸出目的而生成的機器生成的 HTML、PostScript 或 PDF。

“標題頁”是指印刷書籍的標題頁本身,以及以下需要用來清晰地顯示本許可證要求出現在標題頁上的材料的頁面。 對於沒有標題頁的格式的作品,“標題頁”是指在文字正文開始之前最突出顯示作品標題的文字附近的文字。

“出版者”是指向公眾分發文件副本的任何個人或實體。

“標題為 XYZ 的部分”是指文件的命名子單元,其標題要麼完全是 XYZ,要麼包含 XYZ 在括號中緊隨翻譯 XYZ 的另一種語言的文字之後。 (這裡 XYZ 代表下面提到的特定部分名稱,例如“致謝”、“獻辭”、“推薦”或“歷史”。) 當您修改文件時,“保留該部分的標題”意味著它仍然是“標題為 XYZ 的部分”,根據此定義。

文件可能在宣告本許可證適用於文件的通知旁邊包含免責宣告。 這些免責宣告被認為是透過引用包含在本許可證中,但僅限於免除擔保:這些免責宣告可能產生的任何其他含義均為無效,並且不影響本許可證的含義。

2. 逐字複製

您可以以任何媒介複製和分發文件,無論是商業上還是非商業上,前提是所有副本中都複製了本許可證、版權宣告以及宣告本許可證適用於文件的許可證宣告,並且您沒有在這些條件之外新增任何其他條件。 您不能使用技術手段來阻止或控制您製作或分發的副本的閱讀或進一步複製。 但是,您可以接受補償以換取副本。 如果您分發了足夠數量的副本,您還必須遵循第 3 節中的條件。

您也可以在上述相同條件下借閱副本,並且您可以公開展示副本。

3. 大量複製

如果您釋出印刷副本(或通常具有印刷封面的媒體中的副本)文件,數量超過 100 份,並且文件的許可證宣告要求封面文字,您必須將副本裝入帶有所列出所有封面文字的封面上,這些文字清晰易懂:封面文字在封面,封底文字在封底。 兩個封面也必須清晰易懂地識別您為這些副本的出版者。 封面必須以所有詞語同樣突出和可見的方式呈現完整標題。 您可以在封面中新增其他材料。 僅限於封面的更改的複製,只要它們保留文件的標題並滿足這些條件,就可以在其他方面被視為逐字複製。

如果任何一個封面的所需文字過於冗長,無法清晰地容納,您應該將第一個列出的文字(儘可能多地合理地容納)放在實際的封面上,並將其餘文字繼續到相鄰的頁面上。

如果您釋出或分發數量超過 100 份的文件的不透明副本,您必須要麼將機器可讀的透明副本與每個不透明副本一起包含,要麼在每個不透明副本中或與每個不透明副本一起宣告一個計算機網路位置,從該位置,一般的網路使用公眾可以使用公共標準網路協議下載文件的完整透明副本,沒有新增的材料。 如果您使用後一種選擇,在您開始大量分發不透明副本時,您必須採取合理的謹慎步驟,以確保該透明副本在您最後一次(直接或透過您的代理或零售商)向公眾分發該版本的該版本後的至少一年內仍然可以從所述位置訪問。

請求,但不要求,您在重新分發大量副本之前,最好先聯絡文件的作者,以便給他們一個機會向您提供文件的更新版本。

4. 修改

您可以在上述第 2 和 3 節的條件下複製和分發文件的修改版本,前提是您以完全相同的許可證釋出修改版本,修改版本充當文件的角色,從而允許擁有其副本的任何人分發和修改修改版本。 此外,您必須在修改版本中執行以下操作

  1. 在標題頁(以及任何封面上)使用與文件不同的標題,以及與以前版本(如果有的話,應該在文件的歷史部分中列出)不同的標題。 如果原始出版者允許,您可以使用與以前版本相同的標題。
  2. 在標題頁上,列出作為作者的一個人或多個負責修改版本中修改的作者,以及至少五位主要的文件作者(如果文件中少於五位,則為所有主要作者),除非他們免除你對此要求的義務。
  3. 在標題頁上,宣告修改版本的釋出者名稱為釋出者。
  4. 保留文件中的所有版權宣告。
  5. 在其他版權宣告旁邊新增一個適合你修改的版權宣告。
  6. 在版權宣告之後,包含一個許可證宣告,以書面形式授予公眾在以下附錄所示條款下使用修改版本的許可權。
  7. 在該許可證宣告中保留文件許可證宣告中給出的不變部分和必要封面文字的完整列表。
  8. 包含本許可證的未經修改的副本。
  9. 保留標題為“歷史”的部分,保留其標題,並在其中新增一項,至少說明修改版本的標題、年份、新作者和釋出者,如標題頁所述。如果文件中沒有標題為“歷史”的部分,則建立一個部分,說明文件的標題、年份、作者和釋出者,如其標題頁所述,然後新增一項,描述修改版本,如上一句所述。
  10. 保留文件中提供的用於公開訪問文件透明副本的網路位置(如果有),以及文件中提供的用於其先前版本(基於其)的網路位置。這些可以放在“歷史”部分中。你可以在以下情況下省略對至少在文件本身釋出前四年釋出的作品或其所指版本的原始釋出者授予許可的作品的網路位置。
  11. 對於任何標題為“致謝”或“獻詞”的部分,保留該部分的標題,並保留該部分中給出的所有貢獻者致謝和/或獻詞的實質和基調。
  12. 保留文件的所有不變部分,其文字和標題保持不變。部分編號或等效項不被認為是部分標題的一部分。
  13. 刪除任何標題為“認可”的部分。修改版本中不能包含此部分。
  14. 不要將任何現有部分重新命名為“認可”或與任何不變部分的標題衝突。
  15. 保留任何保修免責宣告。

如果修改版本包含新的前言部分或附錄,這些部分符合二級部分的條件,並且不包含從文件中複製的材料,你可以在選擇的情況下將這些部分中的部分或全部指定為不變的。為此,將它們的標題新增到修改版本的許可證宣告中的不變部分列表中。這些標題必須與任何其他部分標題不同。

你可以新增一個標題為“認可”的部分,前提是它只包含對你修改版本的認可,這些認可來自各個方面,例如同行評審的宣告或文字已獲組織批准作為標準的權威定義。

你可以將最多五字的段落作為封面文字,以及最多25字的段落作為封底文字,新增到修改版本中封面文字列表的末尾。任何一個實體最多隻能新增一個封面文欄位落和一個封底文欄位落。如果文件已經包含與相同封面相關的封面文字,該文字之前由你新增,或由你代表的同一實體安排新增,你不能再新增另一個;但你可以在獲得新增舊文字的先前釋出者的明確許可的情況下替換舊文字。

文件的作者和釋出者不會透過本許可證授予許可,使用他們的姓名進行宣傳,或斷言或暗示對任何修改版本的認可。

5. 組合文件

你可以將文件與其他根據本許可證釋出的文件組合在一起,根據第 4 節中為修改版本定義的條款,前提是你將所有原始文件的所有不變部分包含在組合中,未經修改,並將其全部列為組合作品的許可證宣告中的不變部分,並且你保留所有它們的保修免責宣告。

組合作品只需要包含本許可證的一個副本,並且多個相同的不變部分可以用一個副本替換。如果有多個具有相同名稱但內容不同的不變部分,則透過在每個部分的末尾新增圓括號中的原始作者或釋出者名稱(如果已知)或唯一編號,使每個部分的標題唯一。對組合作品許可證宣告中的不變部分列表中的部分標題進行相同的調整。

在組合中,你必須組合各個原始文件中任何標題為“歷史”的部分,形成一個標題為“歷史”的部分;同樣,組合任何標題為“致謝”的部分,以及任何標題為“獻詞”的部分。你必須刪除所有標題為“認可”的部分。

6. 文件集

你可以建立一個集合,包含文件和其他根據本許可證釋出的文件,並將各個文件中的本許可證副本替換為包含在集合中的單個副本,前提是你遵循本許可證關於所有其他方面的逐字複製的規則。每個文件。

你可以從這樣的集合中提取單個文件,並在本許可證下單獨分發它,前提是你將本許可證的副本插入提取的文件中,並且在其他所有方面遵循本許可證關於該文件的逐字複製。

7. 與獨立作品的聚合

文件或其派生作品與其他獨立的文件或作品的彙編,在或在儲存或分發介質的捲上,被稱為“聚合”,如果彙編產生的版權不用於限制彙編使用者的法律權利超出了各個作品允許的範圍。當文件包含在聚合中時,本許可證不適用於聚合中的其他作品,這些作品本身不是文件的派生作品。

如果第 3 節的封面文字要求適用於文件的這些副本,那麼如果文件少於整個聚合的一半,則文件的封面文字可以放在括號內包含文件的聚合中的封面,或者如果文件是電子形式,則可以放在封面的電子等效物上。否則,它們必須出現在括號內包含整個聚合的印刷封面。

8. 翻譯

翻譯被認為是一種修改形式,因此你可以在第 4 節的條款下分發文件的翻譯。用翻譯替換不變部分需要其版權持有者的特別許可,但你可以包含一些或所有不變部分的翻譯,除了這些不變部分的原始版本之外。你可以包含本許可證的翻譯,以及文件中的所有許可證宣告和任何保修免責宣告,前提是你也包含本許可證的原始英文版本以及這些宣告和免責宣告的原始版本。如果翻譯與本許可證或宣告或免責宣告的原始版本之間存在分歧,則以原始版本為準。

如果文件中的部分標題為“致謝”、“獻詞”或“歷史”,則保留其標題的要求(第 4 節)通常需要更改實際標題。

9. 終止

除非本許可證明確規定,否則你不得複製、修改、再許可或分發文件。任何以其他方式複製、修改、再許可或分發它的企圖都是無效的,並將自動終止你在本許可證下的權利。

但是,如果你停止所有違反本許可證的行為,那麼你從特定版權持有者那裡獲得的許可將被恢復(a)暫時,除非和直到版權持有人明確和最終終止你的許可,以及(b)永久,如果版權持有人未能透過一些合理的方式在你停止違反行為後 60 天內向你發出違反通知。

此外,如果你從特定版權持有人那裡獲得的許可將被永久恢復,如果版權持有人透過一些合理的方式向你發出違反通知,這是你第一次從該版權持有人那裡收到違反本許可證的通知(針對任何作品),並且你在收到通知後 30 天內糾正了違反行為。

本節終止你在本許可證下的權利不會終止根據本許可證從你那裡收到副本或權利的當事人的許可證。如果你的權利已被終止並且未被永久恢復,收到相同材料的部分或全部副本不會賦予你使用它的任何權利。

10. 本許可證的未來修訂

自由軟體基金會可能會不時釋出 GNU 自由文件許可證的新修訂版本。這些新版本在精神上將類似於本版本,但在細節上可能有所不同,以解決新的問題或關注點。參見 http://www.gnu.org/copyleft/.

每個版本的許可證都給出一個不同的版本號。如果文件指定本許可證的特定編號版本“或任何更高版本”適用於它,則可以選擇遵循該指定版本或自由軟體基金會發布的任何更高版本(而不是草案)的條款和條件。如果文件沒有指定本許可證的版本號,則可以選擇自由軟體基金會發布的任何版本(而不是草案)。如果文件指定代理可以決定可以使用本許可證的哪些未來版本,則該代理公開接受版本的宣告將永久授權你為該文件選擇該版本。

11. 重新許可

“大型多人協作網站”(或“MMC 網站”)是指任何釋出可版權作品的世界範圍內的全球資訊網伺服器,並且還提供顯著設施供任何人編輯這些作品。任何人都可以編輯的公共維基就是這樣一個伺服器的例子。網站中包含的“大型多人協作”(或“MMC”)是指在 MMC 網站上釋出的任何一組可版權作品。

“CC-BY-SA”是指由 Creative Commons Corporation 釋出的 Creative Commons Attribution-Share Alike 3.0 許可證,Creative Commons Corporation 是一家非營利性公司,其主要營業場所位於加利福尼亞州舊金山,以及該同一組織釋出的該許可證的未來版權許可版本。

“合併”是指在整個或部分發布或重新發布文件作為另一個文件的一部分。

如果 MMC 按照本許可證獲得許可,並且如果所有在 MMC 之外的某個地方首次根據本許可證釋出,隨後被全部或部分合併到 MMC 的作品,(1)沒有封面文字或不變部分,以及(2)因此在 2008 年 11 月 1 日之前合併,則 MMC 是“符合重新許可條件的”。

MMC 網站的運營商可以在 2009 年 8 月 1 日之前的任何時間,在同一網站上根據 CC-BY-SA 重新發佈網站中包含的 MMC,前提是 MMC 符合重新許可條件。

如何將本許可證用於你的文件

要在你編寫的文件中使用本許可證,請在文件中包含本許可證的副本,並將以下版權和許可證宣告放在標題頁之後

版權所有 (c) 年份 你的姓名。
允許複製、分發和/或修改本檔案
根據 GNU 自由文件許可證第 1.3 版的條款
或自由軟體基金會發布的任何更高版本;
沒有不變部分、沒有封面文字和沒有封底文字。
許可證的副本包含在標題為“GNU
自由文件許可證”的部分。

如果您有不變部分、封面文字和封底文字,請用以下內容替換“with...Texts.”行

其中不變部分為 LIST THEIR TITLES,
封面文字為 LIST,封底文字為 LIST。

如果您有不變部分但沒有封面文字,或者三種文字的組合,請將這兩種替代方案合併以適應實際情況。

如果您的文件包含非平凡的程式程式碼示例,我們建議您以您選擇的免費軟體許可證(如 GNU 通用公共許可證)的形式並行釋出這些示例,以允許它們在免費軟體中使用。

華夏公益教科書