ALGOL 58

来自Local Chinese Wikipedia
跳转到导航 跳转到搜索

页面Module:Infobox/styles.css没有内容。

ALGOL 58
脚本错误:没有“InfoboxImage”这个模块。
脚本错误:没有“InfoboxImage”这个模块。
编程范型过程式, 指令式, 结构化
設計者脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 約翰·巴科斯, 脚本错误:没有“ilh”这个模块。, 艾伦·佩利, 脚本错误:没有“ilh”这个模块。
发行时间1958年,​脚本错误:没有“TimeAgo”这个模块。​(1958
当前版本Template:Software version
網站Template:Official url
受影响于
FORTRAN, IT[1], Plankalkül[2], 脚本错误:没有“ilh”这个模块。, Sequentielle Formelübersetzung[3]
影響語言
ALGOL 60,以及类ALGOL语言

脚本错误:没有“Check for unknown parameters”这个模块。

ALGOL 58(源自Template:Langx的縮寫),最早稱為“国际代数语言”(Template:Langx,縮寫為IAL)[4],它是一種用于计算机编程算法语言,是ALGOL家族的第一個成員。它在1958年問世,ALGOL 60即是它的基礎上開發而成。

ALGOL 58介入了复合语句的基础概念[5],但只局限于控制流程,它没有以ALGOL 60中的那种方式,结合上标识符作用域

歷史[编辑]

1958年,美国计算机协会(ACM)与联邦德国的脚本错误:没有“ilh”这个模块。(GAMM)在苏黎世成立小组,把美国方面提出的“编程语言[6],和欧洲方面提出的“描述计算进程脚本错误:没有“ilh”这个模块。[7],这两种提议综合为一从而形成“国际代数语言”(IAL)[8],随后在1959年正式报告中改称为算法语言ALGOL[9]

ALGOL 58变体时间线[编辑]

名称 作者 国家 描述 目标CPU
ZMMD实现 1958 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。 File:Flag of Germany.svg 德国 ZMMD是ZürichMünchenMainzDarmstadt的缩写 脚本错误:没有“ilh”这个模块。
脚本错误:没有“ilh”这个模块。 1958 脚本错误:没有“ilh”这个模块。 File:Flag of the United States.svg 美国 脚本错误:没有“ilh”这个模块。
JOVIAL 1960 脚本错误:没有“ilh”这个模块。 File:Flag of the United States.svg 美国 DODHOL,先于Ada 多种
脚本错误:没有“ilh”这个模块。 1960 Joel Merner等人 File:Flag of the United States.svg 美国 脚本错误:没有“ilh”这个模块。 B220
脚本错误:没有“ilh”这个模块。 1960 密西根大学 File:Flag of the United States.svg 美国 IBM 7090/7094主机,接着在1960年代中期移植到脚本错误:没有“ilh”这个模块。
脚本错误:没有“ilh”这个模块。 1961 脚本错误:没有“ilh”这个模块。 File:Flag of the United States.svg 美国 脚本错误:没有“ilh”这个模块。
脚本错误:没有“ilh”这个模块。 1962 达特茅斯学院脚本错误:没有“ilh”这个模块。等人 File:Flag of the United States.svg 美国 后来演进成ALGOL 60 脚本错误:没有“ilh”这个模块。
SUBALGOL 1962 斯坦福大学脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。脚本错误:没有“ilh”这个模块。 File:Flag of the United States.svg 美国 BALGOL扩展 IBM 7090

例子代码[编辑]

下面是IAL报告中的例子代码,采用辛普森积分法计算函数F(x)的积分,函数F(x)的值由假定存在的函数例程提供:

块缩进排版 语言报告的排版[9]
procedure Simps(F(), a, b, delta, V);
comment a, b are the min and max, resp. of the points def. interval of integ.
        F() i​​s the function to integrated.
        delta is the permissible difference between two successive Simpson sums
        V is greater than maximum absolute value of F on a, b;
begin
Simps:
    Ibar := V×(b-a)
    n := 1
    h := (b-a)/2
    J := h×(F(a)+F(b))
J1: S := 0;
    for k := 1 (1) n
        S := S + F(a+(2×k-1)×h)
    I := J+4×h×S
    if (delta < abs(I-Ibar))
    begin
        Ibar := I
        J := (I+J)/4
        n := 2×n; h := h/2
        go to J1
    end
    Simps := I/3
    return
    integer (k, n)
end Simps
procedure     Simps(F(), a, b, delta, V);
comment a, b are the min and max, resp. of the points def. interval of integ.
        F() i​​s the function to integrated.
        delta is the permissible difference between two successive Simpson sums
        V is greater than maximum absolute value of F on a, b;
begin
Simps:  Ibar  := V×(b-a)
            n := 1
            h := (b-a)/2
            J := h×(F(a)+F(b))
J1:         S := 0;
        for k := 1 (1) n
            S := 
            S + F(a+(2×k-1)×h)
            I := J+4×h×S
        if  (delta < abs(I-Ibar))
begin   Ibar  := I
            J := (I+J)/4
            n := 2×n; h := h/2
        go to J1
end
        Simps := I/3
return
integer (k, n)
end     Simps

这里在过程主体的复合语句的begin之后,必须为前面的过程头部中声明的过程名字包含此标识符的恰好一个语句标签,它被用作过程入口点;这里的非实数类型声明integer (k, n)放在了过程主体的末尾,即就在这个复合语句的end之前;有标签的复合语句在其end之后可以跟随着这个标签(尾随;来分隔于后续字符),它被用来指示这个复合语句的范围。

ALGOL 58对ALGOL 60的影响[编辑]

  • IAL介入了参考、出版和硬件语言的三级概念,和有别于自由选择的标识符的有独立表示的“字分界符”的概念(因此没有保留字)。ALGOL 60保持了这种三级概念[10]
  • IAL介入了对赋值(表示左向箭头的:=)和等价关系=的区分,ALGOL 60保持了这种区分。
  • IAL和ALGOL 60都允许了具有任意的下方和上方下标边界的数组,并允许用整数表达式定义下标边界。
  • IAL和ALGOL 60都允许嵌套的过程定义以及对应标识符的作用域。
  • IAL报告采用与ALGOL 60报告几乎相同的术语描述参数替换,将传名调用的可能性保留开放,但不清楚是否当时就认识到了这一点。
  • IAL允许数值语句标号,ALGOL 60保持了它。
  • IAL在程序内包括非ALGOL代码的可能性,已经在过程参数的上下文中提示到了。
  • IAL和ALGOL 60都有“switch指定式”,但无关于C语言及其有关语言的脚本错误:没有“ilh”这个模块。
  • IAL提议了内联函数形如f(x) := x / 2,这在ALGOL 60中被去掉了。
  • IAL过程声明为输入和输出参数提供了独立声明,过程可以返回多个值,这种机制在ALGOL 60中被替代为声明。
  • IAL中的变量声明可以位于程序中的任何位置而不必需在过程的开始处。与之相对,在ALGOL 60块中的声明的出现应当先于所有执行语句。
  • IAL的for语句拥有形式for i := base (increment) limit,直接模仿了脚本错误:没有“ilh”这个模块。的编程语言脚本错误:没有“ilh”这个模块。的循环,将其=替代为:=,并将其德语关键字Für替代为英语翻译for;ALGOL 60将圆括号替代为字分界符stepuntil,使得前者语句转而写为for i := base step increment until limit
  • IAL的if语句没有then子句或else子句,它只是用布尔表达式守卫后续语句,进行关系运算的布尔表达式需要用圆括号包围起来。IAL提供了交替语句if either ~ or if ~ end来清晰的允许多个条件的测试。二者都被替代为ALGOL的if ~ then ~ else ~构造,它介入了脚本错误:没有“ilh”这个模块。歧义。
  • IAL通过do语句提供宏替代,这在ALGOL 60中被去掉了。
  • IAL允许在将数组传递给过程时忽略一个或多个数组下标,允许将给一个过程的任何或所有的实参传递给另一个过程。
  • IAL的中缀布尔运算符都有相同的优先级。指数通过成对的上下箭头来指示,这去除了嵌套指数的解释混淆;ALGOL 60将成对的箭头替代为一个单一的上箭头,它的功能等价于FORTRAN的**
  • IAL报告不明确规定要提供哪些标准函数,模糊的提及了“标准分析函数”。ALGOL 60报告拥有标准函数的更明确列表。

引用[编辑]

  1. 脚本错误:没有“citation/CS1”这个模块。
  2. 脚本错误:没有“citation/CS1”这个模块。
  3. 脚本错误:没有“citation/CS1”这个模块。
  4. 脚本错误:没有“citation/CS1”这个模块。
  5. 脚本错误:没有“Citation/CS1”这个模块。
  6. 脚本错误:没有“citation/CS1”这个模块。
  7. 脚本错误:没有“citation/CS1”这个模块。
  8. 脚本错误:没有“Citation/CS1”这个模块。
  9. 9.0 9.1 脚本错误:没有“citation/CS1”这个模块。
  10. 脚本错误:没有“citation/CS1”这个模块。

外部連結[编辑]

package.lua第80行Lua错误:module 'Module:Arguments' not found Template:ALGOL programming