ALGOL 68(源自英语:ALGOrithmic Language 1968的缩写),一种指令式程式语言,为ALGOL家族的成员,是官方上的ALGOL 60后继者。它设计的目标,是提供更广泛的应用,以及更严格的语法定义。

Quick Facts 编程范型, 设计者 ...
ALGOL 68
编程范型多范式指令式过程式结构化并发
设计者A. van Wijngaarden英语Adriaan van Wijngaarden, B.J. Mailloux英语Barry J. Mailloux, J.E.L. Peck英语John E. L. Peck, C.H.A. Koster英语Cornelis H.A. Koster等人
发行时间最终报告: 1968年,​56年前​(1968
型态系统静态强类型安全结构化
网站Revised Report on the Algorithmic Language ALGOL 68
主要实作产品
ALGOL 68C英语ALGOL 68C, ALGOL 68 Genie(新近[1]), ALGOL 68R英语ALGOL 68R, ALGOL 68RS英语ALGOL 68RS, ALGOL 68S英语ALGOL 68S, FLACC英语FLACC, Алгол 68 Ленинград, Odra ALGOL 68英语Odra (computer)
衍生副语言
ALGOL 68/FR (Final Report: 1968), Algol 68/RR (Revised Report: 1973)
启发语言
ALGOL 60, ALGOL Y英语ALGOL Y
影响语言
C[3][5]C++[6]Bourne shellKornShellBashSteelman英语Steelman language requirementsAdaPython[7]Seed7英语Seed7Mary英语Mary (programming language)S3英语S3 (programming language)
Close

概论

ALGOL 68由IFIP Working Group 2.1英语IFIP Working Group 2.1负责设计。1968年12月20日,Working Group 2.1 通过了这个语法规范,并提交IFIP大会通过。它的主要架构者为阿德里安·范·韦恩加登英语Adriaan van Wijngaarden

代码样例

下面的样例代码实现了埃拉托斯特尼筛法来找到小于等于100的所有素数。ALGOL 68中NIL是同其他语言中“空指针”的类似者,表示法x OF y访问STRUCT y的成员x

BEGIN # Algol-68素数筛法,函数式风格 #

    MODE LIST = REF NODE;
    MODE NODE = STRUCT (INT h, LIST t);
    PROC cons = (INT n, LIST l) LIST: HEAP NODE := (n, l);
    PROC one to = (INT n) LIST:
        (PROC f = (INT m) LIST: (m > n | NIL | cons(m, f(m+1))); f(1));
    PROC error = (STRING s) VOID:
        (print((newline, " error: ", s, newline)); GOTO stop);
    PROC hd = (LIST l) INT: (l IS NIL | error("hd NIL"); SKIP | h OF l);
    PROC tl = (LIST l) LIST: (l IS NIL | error("tl NIL"); SKIP | t OF l);
    PROC show = (LIST l) VOID:
        (l ISNT NIL | print((" ", whole(hd(l), 0))); show(tl(l)) | print(newline));
  
    PROC filter = (PROC (INT) BOOL p, LIST l) LIST:
        IF l IS NIL THEN NIL
        ELIF p(hd(l)) THEN cons(hd(l), filter(p, tl(l)))
        ELSE filter(p, tl(l))
        FI;
  
    PROC sieve = (LIST l) LIST:
        IF l IS NIL THEN NIL
        ELSE
            PROC not multiple = (INT n) BOOL: n MOD hd(l)  0;
            cons(hd(l), sieve(filter(not multiple, tl(l))))
        FI;

    PROC primes = (INT n) LIST: sieve(tl(one to(n)));
  
    show(primes(100))
END

将上述代码保存入文本文件primes.a68中,并将其中替代为/=,然后使用ALGOL 68 Genie执行它:

$ a68g -quiet primes.a68
 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

注释

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.