COMAL/syntaks
Det er blevet fortalt mange gange at Børge Christensen opfandt COMAL fordi han fandt BASIC mangelfuld. Her har vi rekonstrueret den samme oplevelse med den BASIC, der blev brugt på RC7000 i midten af halvfjerdserne, og viser samtidig hvordan det samme problem kunne være skrevet i COMAL.
Sammenligning
Dette afsnit viser kildeteksten til et simpelt program, som beregner den decimale værdi fra et hexadecimalt input. Programmet stopper når det når til enden af strengen eller det første tegn, som ikke er et hexadecimalt ciffer.
5 DIM H$(20), C$(1) 10 INPUT "Indtast et hexadecimalt nummer";H$ 20 R=0 30 FOR I=1TO LEN(H$) 40 C$ = H$(I, I) 50 IF C$ < "0" OR C$ > "9" THEN 80 60 R = R*16+ASC(C$)-ASC("0") 70 GOTO 140 80 IF C$ < "A" OR C$ > "F" THEN110 90 R= R*16+ASC(C$)-ASC("A")+10 100 GOTO 140 110 IF C$ < "a" OR C$ > "f" GOTO 160 120 R = R*16+ASC(C$)-ASC("a")+10 140 NEXT I 160 PRINT "Decimalt resultat: ";R
0005 DIM h$ OF 20,c$ OF 1 0010 INPUT "Indtast et hexadecimalt nummer": h$ 0020 r:=0 0030 FOR i:=1 TO LEN(h$) DO 0040 c$:=h$(i:i) 0050 IF c$>="0" AND c$<="9" THEN 0060 r:=r*16+ORD(c$)-ORD("0") 0070 ELIF c$>="A" AND c$<="F" 0080 r:=r*16+ORD(c$)-ORD("A")+10 0090 ELIF c$>="a" AND c$<="f" 0100 r:=r*16+ORD(c$)-ORD("a")+10 0110 ELSE 0120 GOTO udhop 0130 ENDIF 0140 ENDFOR i 0150 udhop: 0160 PRINT "Decimalt resultat: ";r
Forskelle
Her er de ændringer, som blev indført i COMAL for at gøre det nemmere at lære:
- COMAL80 formatterer koden for brugeren og laver automatisk indrykning, samt fjerner mellemrum i udtryk. En typisk elevopgave i BASIC ville have meget inkonsistent brug af mellemrum, og ofte så få som muligt. Det opstår pga. de utallige omskrivninger der foretages under programmeringen.
- Der er fler-linjers
IF
sætninger medELSE
,ELIF
ogENDIF
. Data General Extended BASIC har ikke en 'ELSE' kommando. Man kan heller ikke have flere sætninger på samme linje. I praksis må man bruge GOTO - Flertydigheden i dimensionering af længden på strenge er blevet fjernet. I BASIC bruges
DIM A(10)
til at definere en tabel med 10 elementer af tal, hvorimodDIM A$(10)
dimensionerer en streng på maks. 10 tegn. GOTO
går ikke til et linje nr., men til en mærkat. I BASIC er alle linjer et potentielt gå-til punkt, hvilket gør det væsentligt sværere at gennemgå.NEXT
er blevet erstattet medENDFOR
for at være konsistent medENDCASE
,ENDIF
,ENDWHILE
og andre flerlinjers ordrer.
De fleste ældre programmører vil være bedst bekendt med Microsoft BASIC. Denne variant har nogle forskelle i forhold til den Data General BASIC, som Børge Christensen oplevede da han opfandt COMAL.
DataGeneral Extended BASIC | Microsoft BASIC |
---|---|
H$(I,J) | MID$(H$, I, J-I+1) |