JOSS

calcolo scientifico

JOSS è stato uno dei primi sistemi interattivi per il calcolo scientifico. Ebbe origine alla RAND Corporation nel 1964 per il calcolatore JOHNNIAC, e fu successivamente realizzato in varie versioni e con nomi diversi (CAL, CITRAN, ISIS, PIL/I, TELCOMP) su altri calcolatori, fra cui PDP6; la versione su PDP è indicata come JOSS II e contiene alcune significative estensioni al linguaggio.

I tipi di dato di JOSS sono i numeri scalari o matrici di una o due dimensioni con indice da 0 a 99; i nomi delle variabili sono una lettera maiuscola o minuscola. I comandi iniziano con la lettera maiuscola e terminano con il punto, il loro tracciato è libero. JOSS accetta istruzioni dirette o indirette, queste sono individuate da un numero frazionario, e sono successivamente eseguibili singolarmente tramite il comando Do step ii.dd. L’insieme delle istruzioni che hanno la parte intera uguale, è eseguibile come un sottoprogramma con il comando: Do part ii.. Do corrisponde ad un richiamo con ritorno, il trasferimento del controllo avviene con il comando To step ... o To part ....

Le istruzioni Demande e Type forniscono semplici operazioni di input output, Type ha diverse opzioni fra cui quella di stampare i dati numerici formattati. Il comando per assegnare ad una variabile un valore è Set v=espressione., il comando analogo Let, introdotto in JOSS II, è, di fatto, la dichiarazione di una funzione:

	: Let S=sin(a)
	: Set a=355/226
	: 355/226  un'approssimazione di pigreco/2 *
	: Type S
	     S = 1

I commenti sono individuati da * in prima colonna, lo stesso carattere, in fine riga, informa l’interprete di non considerare la riga stessa.

Nelle espressioni possono comparire gli operatori aritmetici usuali, e alcune funzioni fra cui seno, coseno e tangente, logaritmo esponente e radice quadrata. Il valore assoluto ricalca la notazione manuale: |a|.

Le istruzioni possono essere eseguite in modo condizionato: Istruzione if condizione.:

	: Set q=cos(2)
	: Type q,"negativo" if q <0
	     q = -0.416147
	     negativo

Esiste la possibilità di iterare un’istruzione o un blocco di istruzioni: Do step ii.dd for x = a(b)c. e Do part ii. for x = a(b)c. dove a è il valore di inizio ciclo, b l’incremento e c il valore di fine ciclo. To step ii.dd e To part ii. trasferiscono il controllo alle istruzioni all’indirizzo indicato. Infine Delete e alcune subcomandi di Type permettono di editare il programma.

JOSS II, oltre la già citata possibilità di dichiarare formule, prevede la gestione di file, di un timer (Reset timer, Type timer), alcune funzioni su liste numeriche (sum, prod), funzioni su liste di predicati (conj, disj, first), la funzione tv(predicato) per trasformare Vero e Falso in 1 e 0 e ampliamento di alcuni comandi. Inoltre venne introdotta l’iterazione nella forma Do step_or_part for v s(i)e dove in cui la variabile v assume valore iniziale s, è incrementata del valore i ed il ciclo termina quando raggiunge il valore e. Gli iteratori possono essere inseriti anche nelle funzioni a lista.

1.3 Do step 2.1 for i=1<1>10.
1.4 Type first(i=1<1>10:m[i]>7).
1.5 Type sum(i=1<1>10:m[i])
1.6 Type prod(i=1<1>10:m[i])
1.7 Done
2.1 Set m[i] = i.
Do part 1

$ /home/joss/joss s.joss
s.joss loading...
first(i=1<1>10:m[i]>7) = 8
sum(i=1<1>10:m[i]) = 55
prod(i=1<1>10:m[i]) = 3.6288e+06
For exit type: Quit

L’esempio che segue è una semplice simulazione.

				

* JOSS II emulator by Robert A Mayans 7 Oct 1996 * modified by El Condor December 2002 * simulazione popolazione batterica * e = energia totale, b = popolazione batterica * d = energia consumata per la mitosi * ad ogni ciclo avviene la mitosi in proporzione inversa alla popolazione * di fatto proporzionale all'energia disponibile. * l = la popolazione limite, p = percentuale di mitosi * 10% la sparizione di batteri con liberazione di energia Let l = b+e/d Let p = 1-b/l Form 1: "Popolazione energia distrutti mitosi\n" Form 2: " %5.0f %5.0f" Form 3: " %5.0f %5.0f\n" 1.10 Set e = 10000. 1.20 Set b = 20. 1.30 Set d = 5. 1.35 Type in form 1. 1.40 Do part 3 for k=1<1>15. 1.50 Done. 3.10 Type b,e in form 2. 3.20 Set B=ip(b*0.1). * B = batteri morti 3.30 Set e = e + B*d. 3.40 Set b = b - B. 3.50 Set C = ip(p*b). * C = batteri che effettuano mitosi 3.60 Set b = b + C. 3.70 Set e = e - d*C. 3.80 Type B,C in form 3. 3.90 Done. * lancio del programma Do part 1.



$ /home/joss/joss simula.joss
simula.joss loading...
Popolazione energia distrutti mitosi
         20   10000         2     17
         35    9925         3     31
         63    9785         6     55
        112    9540 	   11     95
        196    9120 	   19    161
        338    8410	   33    258
        563    7285	   56    379
        886    5670	   88    482
       1280    3700	  128    495
       1647    1865	  164    394
       1877     715	  187    276
       1966     270	  196    219
       1989     155	  198    203
       1994     130	  199    199
       1994     130	  199    199
For exit type: Quit