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.