1

我刚刚发现一本书描述了一个与我需要做的非常相似的过程。然而,这本书是 1972 年出版的,它展示了 ALGOL 中的解决方案,而我需要用一种更新的语言编写我的代码。我想知道我是否正确理解了我面前的 ALGOL 代码在做什么:

  1. 我是对的,下面的代码,

    sl:=ff;

, 只需分配一个值,例如 sl = ff; 声明会在 SAS 中执行吗?

  1. ↑ 字符是否意味着“提升到权力”?

  2. 什么是“真实程序”?它是 FORTRAN 中的子程序还是 SAS 中的模块的 ALGOL 等价物?

  3. 在代码的前面,我读到a是一个数组。那么,我是对的,下面的代码,

    for i: 1 step 1 until m do 
    
    begin a[i]:=0;
    
        for j:=1 step 1 until m do
    
        a[i] :=a[i] + ww[j] x slope;
    
        a[i]:=1/a[j];
    

填充矩阵a,其中i是行号,j是列号,m是(显然)i * j

4

2 回答 2

1
  1. 是的,":=" 为变量赋值

  2. 是的,字符“^”的意思是“提升到”

  3. “真实程序”,我想是“真实程序”。这意味着一个返回实际值的过程。

  4. 在 Algol 中有代码块。每个块都以“开始”开始,以“结束”结束。如果省略开始结束字,则该块只有一条指令。你这里的代码不清楚。

于 2015-12-10T14:48:17.517 回答
1

我同意相邻的评论 1 至 3。

上面给出的代码在几个方面是异常的。我怀疑有转录错误。

首先,“开始”“结束”配对是不完整的。

在 Algol 中,“开始 . . . end' 对是复合语句,或者,如果里面也有声明,那么它是一个块。

在这段代码中,“for i:= 1 step 1 until m do”之后的内容就像一个带有“begin”的复合语句一样开始,但没有匹配的“end”可见。如果我们假设“end”作为下一个标记出现,那么这将完成由“for i:= ...”子句控制的复合语句。所有这些复合语句将重复 m 次,其中 i 包含从 1 到 m 的连续值。

第二个异常是第二个循环,由'for j:= ...'控制,只附加到下一个语句(直到';')并将相同的值集合汇总到每个a[i]和然后用 1/a[j] 覆盖它!(我假设“斜率”是一个标量变量而不是无参数函数,因此它在每次执行时提供相同的值。)

第三,在 Algol 中,在循环终止后对“for”循环中的控制变量的值进行任何假设不是一个好主意。在许多 Algol 实现中,j 在这里将包含 m + 1。因此从 a[1] 到 a[m] 的所有元素都将包含 1/a[m + 1]。如果 a[m + 1] 包含零或如果 a 被声明为“真实数组 a[1:m];”,这可能会失败“除以零” 那么它可能会因“无效索引”而失败。

如果这里有一个转录错误,我们假设最后的语句应该是 a[i]:= 1/a[i],那么所有计算和存储在 a[1] ... a[m] 中的值仍然是相同,并且有更快的编码方法!

我希望这篇长篇大论(比我希望的更长)有所帮助。

于 2015-12-29T02:28:20.750 回答