Southampton BASIC System
Southampton BASIC System ( SOBS ) var en dialekt av BASIC- programmeringsspråket som utvecklades för och användes på ICT 1900-seriens datorer i slutet av 1960-talet och början av 1970-talet; den implementerades som en inkrementell BASIC-tolk under operativsystemet MINIMOP vid University of Southampton och kördes även under MAXIMOP .
Den drevs från en Teletype- terminal, även om CRT-terminaler också kunde användas.
Språkegenskaper
I likhet med många tidiga implementeringar av BASIC behövde SOBS rader för att ha radnummer , både för att en användare skulle kunna lägga till nya rader till programmet på önskad plats och även som mål för GOTO-
och GOSUB
-satser. En RENUMBER
-funktion var tillgänglig för att tillåta sektioner av koden att numreras om, som standard i steg om 10, för att ge mer utrymme i mitten av ett program.
Förutom radnummer representerades alla numeriska värden internt som flyttal .
Uttalanden
Språket hade relativt få uttalanden i jämförelse med moderna programmeringsspråk:
Påstående | Syfte |
---|---|
DATA
|
Lagrade data för att läsa in variabler vid körning |
DIM var ( storlek )...
|
Dimensionera en array. En-, två- och tredimensionella arrayer stöddes. |
SLUTET
|
Stoppa körningen av programmet. |
FOR var = början TILL slut [STEP incr ]
|
Utför en uppsättning satser upprepade gånger för olika värden på var |
GOSUB linje
|
Ring en subrutin vid ett givet linjenummer; flow skulle återgå till nästa programsats när en RETURN exekverades. |
GÅ TILL linje
|
Ovillkorlig förgrening till ett givet linjenummer. |
IF expr THEN rad [ELSE rad ]
|
Villkorligt gren. THEN- och ELSE - delarna kunde bara ge radnummer att gå till. |
INPUT var
|
Be användaren om indata |
LET var = expr
|
Tilldela ett värde till en variabel. Till skillnad från många moderna dialekter av BASIC LET inte ett valfritt ord. |
NÄSTA var
|
Utför nästa iteration av en FOR- slinga. |
SKRIVA UT
|
Utgång till Teletype |
LÄS var ...
|
Läs data från DATA- satser till variabler |
REM
|
Förkortning för REM ark, detta gjorde det möjligt för en kommentar att placeras på en rad |
ÅTERSTÄLL [ rad ]
|
Återställ READ -pekaren för att kunna läsa DATA igen
|
LÄMNA TILLBAKA
|
Gå tillbaka till raden efter en GOSUB . |
Notera särskilt avsaknaden av ett WHILE
-liknande uttalande; FOR
var den enda looping-konstruktionen tillgänglig för programmerare.
Variabler
Variabelnamn för numeriska värden var antingen en enstaka bokstav eller en enda bokstav följt av en enda siffra, vilket ger utrymme för 286 diskreta variabler totalt. Strängar stöddes; variabelnamn för dem hade samma begränsning men följdes av en pundsymbol ( £ ) .
Funktioner
Ett begränsat antal numeriska funktioner tillhandahölls, som alla tog en numerisk parameter:
Fungera | Funktion( ) returnerade |
---|---|
SYND
|
|
COS
|
|
ATN
|
|
SQR
|
|
LOGGA
|
|
EXP
|
|
INT
|
Det största heltal inte större än |
SGN
|
−1, 0 eller 1, beroende på om var mindre än, lika med eller större än noll |
magmuskler
|
om var negativ, annars |
Stödet för strängar var mer begränsat, med endast en funktion, LEN
, som returnerade längden på strängparametern. Understrängar stöddes med hakparenteser, så A£[2,3]
hänvisade till understrängen för strängen A£
från det andra tecknet till och med det tredje tecknet, så
10 LET A £ = "FOO" 20 SKRIV UT A £ [ 2 , 3 ]
skulle skriva ut OO
Denna syntax stöddes också på den vänstra sidan av en uppgift, så
10 LET A £ = "FOO" 20 LET A £ [ 2 , 2 ] = "BAR" 30 SKRIV UT A £
skulle trycka FBARO
Arrayer
Stödet för att hantera arrayer av data var relativt starkt, med MAT-
satser som kunde läsa en hel array från DATA
-satser och utföra användbara matrisoperationer som matrisaddition , matrissubtraktion , matrismultiplikation och hitta den inversa matrisen för en kvadratmatris .
Exempel:
00
000000
10 DIM A ( 3 , 3 ) 20 MAT LÄS A 30 DATA 1 , 1 , 2 , 1 , , 2 , , 2 , 1 40 DIM B ( 3 , 3 ) 50 MAT LÄS B 60 DATA , , 1 , , _ _ , 1 , , 70 DIM C ( 3 , 3 ), D ( 3 , 3 ) 80 MAT C = A * B 90 MAT D = INV ( C ) 100 MAT PRINT D ,
A läses från den första DATA -satsen |
|
B läses från den andra DATA -satsen |
|
C beräknas genom att multiplicera A och B
|
|
D beräknas som inversen av C
|
Utgången skulle vara 2 2 1 1 -1 0 4 -3 -2
Felsökning
SOBS hade primitiva felsökningsfunktioner, begränsade mestadels till TRACE
-satsen. TRACE ON
skulle få tolken att skriva ut varje radnummer när den utfördes.