跳转至内容

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 通用公共许可证)的形式并行发布这些示例,以允许它们在免费软件中使用。

华夏公益教科书