ALGOL 58
页面Module:Infobox/styles.css没有内容。
| 脚本错误:没有“InfoboxImage”这个模块。 | |
| 脚本错误:没有“InfoboxImage”这个模块。 | |
| 编程范型 | 过程式, 指令式, 结构化 |
|---|---|
| 設計者 | 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 脚本错误:没有“ilh”这个模块。, 約翰·巴科斯, 脚本错误:没有“ilh”这个模块。, 艾伦·佩利, 脚本错误:没有“ilh”这个模块。 |
| 发行时间 | 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ürich、München、Mainz、Darmstadt的缩写 | 脚本错误:没有“ilh”这个模块。 |
| 脚本错误:没有“ilh”这个模块。 | 1958 | 脚本错误:没有“ilh”这个模块。 | File:Flag of the United States.svg 美国 | 脚本错误:没有“ilh”这个模块。 | |
| JOVIAL | 1960 | 脚本错误:没有“ilh”这个模块。 | File:Flag of the United States.svg 美国 | DOD的HOL,先于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() is 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() is 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将圆括号替代为字分界符step和until,使得前者语句转而写为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报告拥有标准函数的更明确列表。
引用[编辑]
外部連結[编辑]
- Algol 58Template:Webarchive at the Software Preservation Group (cf. Computer History Museum)
- Algol 58 report from CACM(页面存档备份,存于互联网档案馆) at the Software Preservation Group
package.lua第80行Lua错误:module 'Module:Arguments' not found Template:ALGOL programming