算法约定

2018-06-16 14:09 更新

此规范通常使用带编号的列表来指定算法的步骤。这些算法是用来精确地指定 ECMAScript 语言结构所需的语义。该算法无意暗示任何具体实现使用的技术。在实践中,也许可用更有效的算法实现一个给定功能。


为了方便其使用本规范的多个部分,叫做 抽象操作 (abstract operations) 的一些算法编写成带名称的可传参函数化形式,所以在其他算法里可以通过名称引用它们。


当一个算法产生返回值 ,“return x” 指令说明该算法的返回值是 x,并且算法应该终止。“第 n 步的结果”的简写是 Result(n) 。


为了表达清晰,算法的步骤可细分为有序的子步骤。子步骤被缩进,可以将自身进一步划分为缩进子步骤。大纲编号约定用于识别分步骤,第一层次的子步骤适用小写字母标记,第二层次的子步骤使用小写罗马数字标记。如果需要超过三个层次,则重复这些规则,第四层次使用数字标记。例如 :

  1. Top-level step
        Substep.
        Substep
            Subsubstep.
            Subsubstep.
                Subsubsubstep
                    Subsubsubsubstep


步骤或子步骤可写“if”谓词作为它的子步骤的条件。在这种情况下,当谓词为真时子步骤才适用。如果一个步骤或子步骤由单词“else”开始,那么它是一个谓词,否定前面的同一层级的“if”谓词。


步骤可以表示其子步骤的迭代应用可能指定其子步的迭代应用程序。


步骤可能断言其算法中的某一不变条件。这样的断言可以让算法中隐含的不变条件变成显式的。这种断言不会添加额外的语义要求,实现没有一定去检查的必要性。它们只是用来让算法更清晰。


数学运算,如加法,减法,取反,乘法,除法,还有稍后在本节中定义的数学函数应该总是被理解为对数学实数计算精确的数学结果,其中不包括无穷大,不包括负零区别于正零。本标准中的浮点运算算法模型,包括明确的步骤,在必要情况下处理无穷大和有符号零和执行四舍五入。如果一个数学运算或函数应用一个浮点数,它应该被应用为代表此浮点数的确切的数学值,一个浮点数必须是有限的 ,如果是 +0 或 -0 ,则相应的数学值就是 0。


数学函数 abs(x) 产生 x 的绝对值,如果 x 是负数(小于零),它是这是 - x,否则是 X 本身。


如果 x 是正数,数学函数 sign (x) 产生 1,如果 x 是负数产生 - 1。此标准中 x 为零的情况下不使用 sign 函数。


符号 “x modulo y” (y 必须有限且非零 ) 计算一个满足以下条件的 k 值 ,与 y 同号 ( 或是零 ) ,abs(k) < abs(y) ,对一些整数 q 满足 x−k = q × y。


数学函数 floor(x) 产生不大于 x 的最大整数(最大可为正无穷)。



注:floor(x) = x−(x modulo 1).


如果算法定义“抛出一个异常”,算法的执行将被终止,且没有返回结果。已调用的算法也被终止,直到算法步骤使用术语“如果一个异常被抛出 ...”明确指出异常处理。一旦遇到这种算法步骤,异常将不再被视已发生过。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号