Algol W
Algol W est une version du langage Algol due à Niklaus Wirth, proposée au comité Algol 68 pour succéder à Algol 60. Bien qu'antérieure au Pascal, elle était plus puissante à certains points de vue. En particulier toute expression ou tout bloc ramenait un résultat, ce qui permettait l'écriture d'expressions particulièrement élégantes.
Algol-W est visiblement une étape transitoire entre Algol 60 et Pascal. Il représente une modification relativement légère d'Algol 60, auquel N. Wirth a ajouté les types de données « string », « bitstring », les nombres complexes et les références à des enregistrements (structures), ainsi que le passage de paramètres par valeur, sans changer grand-chose d'autre.
Comme tous les autres langages de Wirth (Pascal, Modula-2, Oberon, etc.), Algol-W est un petit langage à typage statique qui diffère beaucoup moins d'Algol 60 que d'Algol 68, langage nettement plus « gros » et plus complexe.
C'est avec ALGOL W qu'en 1970 Brent programma, sur un IBM 360/67, l'algorithme de multiplication rapide de Strassen[1], démontrant son efficacité pour le produit de deux matrices carrées de plus de 110 lignes.
Exemple
record PERSON ( string NAME; integer AGE; logical MALE; reference(PERSON) FATHER, MOTHER, YOUNGESTOFFSPRING, ELDERSIBLING ); reference(PERSON) procedure YOUNGESTUNCLE (reference(PERSON) R); begin reference(PERSON) P, M; P := YOUNGESTOFFSPRING(FATHER(FATHER(R))); while (P ¬= null) and (¬ MALE(P)) or (P = FATHER(R)) do P := ELDERSIBLING(P); M := YOUNGESTOFFSPRING(MOTHER(MOTHER(R))); while (M ¬= null) and (¬ MALE(M)) do M := ELDERSIBLING(M); if P = null then M else if M = null then P else if AGE(P) < AGE(M) then P else M end
Notes
- Cf. R.P. Brent, Algorithms for matrix multiplication, vol. 157 (mars), Dpt. Computer Science, Université Stanford, coll. « Technical Report CS », , 52 (+ii)