Pagina HP48 GX
(Visualizza pagina con frames)

Corso di programmazione User RPL

Versione 1.1.0

Copyright © 1998 - 1999,  Salvatore Miano (e-mail panmol@iol.it)

 

Avvertenze:
Il numero della versione che si legge subito dopo il titolo vuol essere un'indicazione di eventuali aggiornamenti o revisioni (più che altro spiegazioni relative all'uso di nuovi comandi non presenti nella versione precedente o aggiunta di nuovi argomenti).

 

 

 

PREFAZIONE

 

Lo scopo precipuo di questo "corso" sul linguaggio di programmazione User RPL adoperato dai calcolatori della famiglia HP48, è quello di fornire a chiunque adoperi un tale tipo di calcolatore le nozioni per la realizzazione di più o meno semplici programmi.

Ho dato per scontato che chi utilizzerà queste pagine per imparare a programmare il calcolatore, o semplicemente per ripassare o approfondire quel che già sa, abbia già una certa familiarità con i comandi basilari (tipo somma o elevamento a potenza) e con la notazione polacca inversa RPN.

Il lavoro nasce da degli appunti presi qualche anno fa quando venni in possesso di un HP48 GX, quindi queste pagine HTML in realtà sono una versione riesumata riveduta ampliata pubblicata di quegli appunti. Ho usato, per quel che concerne gli esempi, dei programmi elementari, e questo per consentire a chiunque di non "perdersi durante il cammino", una volta acquisite le nozioni e una certa dimestichezza si possono prendere come altri esempi i programmi riportati nell'appendice A, alla fine di questa pagina, o quelli pubblicati nell'area del sito dedicata appunto ai programmi. 

Ho constatato che alcuni colleghi universitari non possiedono il manuale d'uso in lingua italiana fornito assieme al calcolatore e quand'anche lo hanno a causa delle scarne informazioni riportate su di esso a proposito della programmazione, vengono scoraggiati ad esplorare le varie funzionalità dei molteplici comandi programmabili.

 

Mia gratitudine andrà a coloro i quali segnaleranno suggerimenti e migliorie.

 

 

 

PROGRAMMI

 

GENERALITÀ

 

Un generico programma consiste in un oggetto delimitato dagli identificatori « » il simbolo « indica l'inizio del programma, il simbolo » la fine.  

All'interno del programma possono coesistere nomi, stringe, comandi, strutture, oggetti grafici, altri programmi... e quant'altro lo HP48 consente di manipolare.

Un programma una volta creato viene messo in catasta e memorizzato con un nome, oppure direttamente eseguito senza essere memorizzato premendo il tasto EVAL. Per eseguire un programma memorizzato premere il tasto di menu corrispondente al nome con cui l'abbiamo salvato. Memorizzandolo ovviamente non si corre il rischio di perderlo, mentre eseguendolo senza averlo salvato prima accertarsi che siano abilitati i comandi per richiamare in catasta gli ultimi oggetti cancellati.

I programmi si possono memorizzare sia nella memoria RAM (memoria utente) che nella memoria di porta. Per memorizzare un programma nella memoria RAM mettere il programma nel primo livello della catasta, scrivere un nome opportuno (vedi queste regole) quindi premere STO. Per memorizzare un programma nella memoria di porta, nella porta zero ad esempio, inserire il programma nel primo livello della catasta e digitare :0: Nomedelprogramma (chiaramente sostituire a Nomedelprogramma il nome che si è scelto) quindi premere STO. Per cancellare un programma in memoria RAM agire come quando si vuol cancellare un oggetto purchessia memorizzato. Mentre per cancellare un programma dalla memoria di porta inserire all'interno dei separatori :: rispettivamente il numero della porta e il nome del programma e digitare (o premere) PURGE: nell'esempio precedente :0: Nomedelprogramma PURGE.

Se si sanno manipolare gli elementi presenti nella catasta allora si hanno già delle buone basi per la programmazione.

 

COME COSTRUIRE UN PROGRAMMA

 

Come detto in premessa, alcuni programmi possono essere costruiti proprio allo scopo di manipolare gli elementi in catasta.

Esempio:

« + »

Questo programma equivale a premere il tasto +. Quindi si aspetta che nei primi due livelli della catasta vi siano due oggetti suscettibili ad essere sommati (due numeri, due liste, una lista e una stringa ecc.)

 

Esempio:

« SWAP »

Questo programma equivale a premere il tasto del cursore a destra (SWAP). Quindi se nei primi due livelli della catasta vi sono due elementi il programma li inverte.

Esempio:

« + 2 ^ »

Il programma somma due elementi, eleva al quadrato tale somma e mette il risultato in catasta.

Esempio:

« PROOT »

 

Questo programma utilizza il comando PROOT e quindi consente di trovare le radici di un polinomio numerico del tipo [a1 a2 ... an].

Esempio:

« "Io sono una stringa di testo" »

 

Quest'altro mette nel primo livello della catasta la stringa "Io sono una stringa di testo".

Esempio:

 

« DUP2 2 ^ SWAP 2 ^ 4 ROLL 4 ROLL * 2 * + + »

Questo programma e un po' più complesso ( quando si saranno apprese le nozioni sulla programmazione non apparirà più tale!), esso esegue il prodotto di un binomio i cui due componenti si trovano nei primi due livelli della catasta.

Come si può capire i programmi che agiscono solamente manipolando gli elementi in catasta hanno dei limiti, ebbene, ecco che allora si ricorre all'uso delle variabili.

Si possono utilizzare tre tipi di variabili:

Una variabile è dunque un oggetto generico creato da un programma che viene memorizzato nella memoria utente con un nome (variabile statica), o un oggetto generico sempre cerato da un programma che "esiste" solamente all'interno del programma stesso (variabile locale).

Per creare una variabile statica si adopera massimamente il comando STO preceduto dall'oggetto, che quindi sarà la variabile statica, e dal nome che le si vuol attribuire.

 

I nomi delle variabili, sia statiche che locali sono case sensitive, vale a dire che una lettere minuscola si distingue da una lettera maiuscola (ad esempio la variabile di nome CAVOLO è diversa dalla variabile di nome Cavolo o cavolo o CaVoLo) inoltre esse devono rispettare i seguenti requisiti:

Lunghezza massima 127 caratteri

Non sono ammessi i caratteri: spazio, virgola, punto, punto e virgola, @. Ed inoltre tutti i simboli dei separatori usati per definire i vari oggetti (ad esempio «» {} [] " ' ecc.)

Il nome di una variabile non può iniziare con un numero   

Il nome di una variabile non può essere uguale ad una variabile riservata (ad esempio: PPAR)

Il nome di una variabile non può essere un nome già assegnato ad un comando predefinito (Es: SIN, ^, +)   

Il nome di una variabile statica che usa dei caratteri minuscoli compare nel menu con i caratteri in maiuscolo

Eseguiamo il seguente programma:

 

« 'A1' STO 'A2' STO A1 A2 + »

 

Esso memorizza due oggetti (ad esempio già presenti nella catasta) nella memoria RAM, rispettivamente con i nomi A1 e A2, successivamente richiama tali oggetti esegue la loro somma e mette il risultato in catasta. Se alla fine, le variabili A1 e A2 non servono più si possono eliminare dalla memoria, ed in tal caso il programma precedente potrebbe essere trasformato nel seguente:

 

« 'A1' STO 'A2' STO A1 A2 + 'A1' PURGE 'A2' PURGE »

 

o nel seguente (risparmiando qualche byte):

 

« 'A1' STO 'A2' STO A1 A2 + { A1 A2 } PURGE »

Per creare (definire) una variabile locale all'interno di un programma (esse infatti al contrario delle precedenti esistono soltanto per la durata del programma) si usa il comando ®

Tale comando non fa altro che togliere gli elementi dalla catasta e memorizzarli temporaneamente con dei nomi che lo seguono.

Esempio:

« ® A1 A2 « A1 A2 + » »

Questo programma è funzionalmente uguale al precedente. Esso quindi prende due oggetti (presenti in catasta) assegna loro i nomi A1 e A2 e successivamente richiama tali oggetti e li somma mettendo in catasta il risultato dell'operazione.

Vale la seguente regola per identificare le variabili e i nomi quando se ne definiscono più di una: all'oggetto immesso per primo (che sta nel livello più alto della catasta) viene attribuito il primo nome della serie delle variabili.

Le variabili locali sono da preferire alle variabili statiche in quanto fanno un uso più limitato della memoria RAM, perché non lasciano traccia della loro esistenza una volta eseguito (o anche nell'eventualità che venga interrotto) il programma, e perché si accede ad esse più rapidamente.

Le variabili locali compilate sono delle particolari variabili locali. Esse si identificano facendole precedere dal simbolo della freccia a sinistra ¬   (Es. ¬X). Vengono utilizzate, come le variabili locali, all'interno di un programma o di un sottoprogramma, con la sola differenza che se esse vengono richiamate  al di fuori del programma o sottoprogramma per cui sono state dichiarate producono un messaggio d'errore (le variabili locali invece quando vengono richiamate dopo che la loro vita si è esaurita (!) non danno nessun messaggio di errore ma il loro nome viene considerato come fosse un nome globale)

Esempio:

Il programma « ® a « a 2 ^ » a » esegue il quadrato della variabile locale a e dopo aver eseguito l'operazione richiama a. Essendo però a dichiarata solamente per esistere all'interno del sottoprogramma  « a 2 ^ » il richiamo dà come risultato il nome 'a'; mentre il programma « ® ¬ a « ¬ a 2 ^ » ¬ a » produce un messaggio d'errore in quanto la variabile locale compilata ¬ a non può esistere al di fuori del programma « a 2 ^ » e neppure il suo nome con cui è stata identificata.

Detto ciò ritengo che l'uso delle variabili statiche debba essere fatto solamente quando strettamente indispensabile, preferendo ad esse le variabili locali.

Come in quasi tutti i linguaggi di programmazione, anche nell'User Rpl si possono usare i commenti all'interno dei programmi. I commenti sono delle informazioni supplementari che servono a chi ha elaborato il programma (in genere un programma complesso) di raccapezzarsi qualora debba ritornare ad occuparsi di tale programma a distanza di molto tempo. I commenti non hanno alcuna funzione particolare nel programma, e infatti vengono ignorati.

Per inserire un commento usare il carattere @, quindi far seguire ad esso ciò che si vuol commentare o specificare e concludere il commento sempre con il carattere @. E' da precisare che il commento sparisce una volta che il programma viene immesso in catasta o memorizzato. Per conservare un programma con tutti i commenti inserirlo in una stringa prima di metterlo in catasta.

 

LIBRERIE

 

GENERALITÀ

 

Le librerie sono degli speciali oggetti che possono essere memorizzati nella memoria di porta, dunque anche in schede estraibili. L'unica porta disponibile se non si hanno schede di espansione RAM è la porta zero.

Le librerie sono da preferire ai programmi, soprattutto se si  tratta di pacchetti di programmi. Alcuni dei vantaggi delle librerie sono elencati di seguito:

Maggiore rapidità di esecuzione - Questo perché le variabili si "muovono" con maggiore velocità

Possibilità di nascondere nomi di programmi - In definitiva nel menu della libreria si possono visualizzare soltanto i nomi dei programmi che occorrono e così mantenerlo pulito

Protezione da accidentali cancellazioni - Infatti è molto più complicato disinstallare una libreria che cancellare un programma residente in memoria RAM (consiglio di memorizzare un programma prezioso nella memoria di porta onde evitare appunto una cancellazione fortuita)

Svantaggi delle librerie:

Essendo la libreria un insieme di programmi, non tutti i programmi contenuti in essa possono servire. Questo vuol dire che se ad esempio su 10 programmi totali contenuti in una libreria se ne utilizzano soltanto 4, 6 rimangono inutilizzati e occupano memoria.

Per installare una libreria occorre naturalmente che la libreria sia presente nel calcolatore. Mettere la libreria nel primo livello della catasta, scrivere 0 (numero zero) e premere STO. Il numero 0 può essere sostituito con altri numeri soltanto se si hanno una o più schede di espansione RAM installate (ho constatato che alcune librerie non funzionano quando vengono installate in porte diverse dalla 0). Spegnere e riaccendere il calcolatore o in alternativa premere contemporaneamente i tasti ON e C e quindi rilasciarli.

Per disinstallare una libreria inserire l'oggetto numero di libreria: numero di porta, (accertarsi che l'indice corrente sia HOME e di non avere in catasta la libreria da disinstallare) eseguire il comando DETACH, rimettere l'oggetto numero di libreria: numero di porta nel primo livello della catasta e usare il comando PURGE. L'oggetto numero di libreria: numero di porta è dunque composto da due numeri in mezzo all'identificatore : : Se ad esempio la libreria da rimuovere dalla memoria di porta 0 ha per numero 1604 digitare  : 0 : 1604

Alle volte risulta difficile disinstallare una libreria, a questo proposito prima della procedura precedente eseguire un arresto manuale del calcolatore premendo contemporaneamente e rilasciando i tasti ON e C.

 

COSTRUIRE UNA LIBRERIA PASSO PER PASSO

 

Due programmi che servono per compilare una libreria sono usrlib.zip (30,8 KB) e lib.zip (14,3 KB). Il primo è un programma da utilizzare su computer, il secondo invece consente di creare le librerie direttamente sul calcolatore :-)

Seguire le seguenti istruzioni:
Creare una directory (directory base)

In tale directory inserire:

1) Tutti i programmi che debbono far parte della libreria

2) Una lista con i nomi dei programmi che si vogliono far apparire nel menu della libreria, quindi memorizzare tale lista con il nome
'$VISIBILE' (il simbolo $ si ottiene premendo nell'ordine: il tasto alfa la freccia a sinistra e il 4)

3) Una stringa che rappresenti il titolo della libreria ed eventuali informazioni, tipo l'autore o la Versione, e memorizzare tale stringa con il nome '$TITLE'

4) Un numero identificativo per la libreria (vedi tabella seguente) e memorizzare tale numero con il nome '$ROMID'

 

Numero '$ROMID'

Spiegazione

0000-0256

Librerie interne usate dal calcolatore (non usare questi numeri)

0257-0512

Applicazioni basate su ROM (non usare questi numeri)

0513-0768

Applicazioni basate su RAM (non usare questi numeri)

0769-1536

Numeri disponibili per le librerie (si possono usare questi numeri)

1537-1792

Programmi sperimentali (usare preferibilmente questi numeri)

1793-2047

Nuovi comandi (non usare questi numeri)


5) Il programma  « numero di libreria ATTACH » (sostituendo a numero di libreria il numero che si è scelto al punto 4) e memorizzarlo con il nome '$CONFIG'

6) (Facoltativo) Se si vuol nascondere qualche nome di programma nel menu della libreria onde evitare di affollarlo, inserire all'interno di una lista i nomi di tali programmi e memorizzare la lista con il nome '$HIDDEN'

7) (Facoltativo) Ordinare i nomi che si è scelto di far comparire nel menu della libreria mediante l'uso del comando ORDER incorporato nella ROM, in quanto l'ordine delle etichette di menu è dato proprio dalla posizione iniziale dei programmi all'interno della directory base.



A questo punto si decide di compilare la libreria direttamente sul calcolatore o sul computer.
Se si vuol compilare la libreria sul computer, trasferire la directory base nella medesima cartella contenente il programma USRLIB.EXE, quindi digitare la riga di comando: [posizione programma USRLIB.EXE] [nome directory base] [nome libreria].

(Es. Se il programma si trova nella cartella usrlib posizionata sul desktop di Windows, se la directory base ha il nome PROVA, la libreria la si vuol chiamare PROVA.LIB, scrivere nella riga di comando C:\WINDOWS\Desktop\usrlib\usrlib.exe PROVA PROVA.LIB e quindi eseguire tale istruzione.

Se si vuol creare la libreria direttamente sullo HP48, trasferire ed installare la libreria LIB.LIB.

Eseguire i punti precedenti.

Andare nella directory base e successivamente premere D®LIB (directory a library)

Il programma speculare  LIB®D permette di disassemblare una libreria. Inserire in tal caso il numero identificativo della libreria (che dev'essere installata) e premere appunto  LIB®D

Non resta quindi che verificare che tutto funzioni perfettamente. Anche se può apparire superflua la verifica consiglio di eseguirla sempre.



STRUTTURE DI CONTROLLO DECISIONALI

 

Le strutture di controllo decisionali assieme alle strutture cicliche, sono elementi portanti di qualsiasi linguaggio di programmazione.
Esse permettono di far compiere al programma delle determinate istruzioni al verificarsi di certe condizioni, o di reiterare esecuzioni automatiche senza che il programma venga riavviato di nuovo manualmente.

 

IF  CONDIZIONE  THEN  ESPRESSIONE   END

 

E' il costrutto basilare dell'istruzione IF.

Il funzionamento è il seguente:

Viene valutata CONDIZIONE, che può essere un'espressione aritmetica o logica, o un programma, o comunque un qualcosa che fornisce dei valori logici, cioè 0 e 1 (un valore > 1 vale un 1 logico): se quindi CONDIZIONE risulta vera, vale a dire produce un 1 logico, allora viene eseguita (valutata) ESPRESSIONE, che può essere come al solito un comando o un programma o altro, altrimenti se essa risulta 0, ESPRESSIONE viene ignorata e quindi tutto il costrutto  IF  CONDIZIONE  THEN  ESPRESSIONE  END  non produce alcunché. La parola END stabilisce la fine del costrutto.

Esempio:

« ® a b « IF a b == THEN 1 END » »

Il programma verifica che due numeri inseriti in catasta siano uguali fornendo in tal caso un 1, se non sono uguali in uscita non viene dato nulla.

 

IF  CONDIZIONE  THEN  ISTRUZIONE1  ELSE  ISTRUZIONE2  END

 

E' il costrutto completo dell'istruzione IF.

Il funzionamento è il seguente:

Viene valutata CONDIZIONE, che può essere un'espressione aritmetica o logica, o un programma, o comunque un qualcosa che fornisce dei valori logici, cioè 0 e1 (un valore > 1 vale un 1 logico): se quindi CONDIZIONE risulta vera, vale a dire produce un 1 logico, allora viene eseguita (valutata) ISTRUZIONE1, che può essere come al solito un comando o un programma o altro, altrimenti se essa risulta 0,ISTRUZIONE1 viene ignorata e viene valutata ISTRUZIONE2. La parola  END stabilisce la fine del costrutto.

 

Esempio:

« ® a b « IF a b > THEN a "Il maggiore è" ®TAG ELSE b "Il maggiore è" ®TAG END » »

Il programma  confronta due numeri diversi (a priori) e stabilisce quali di essi è il maggiore.

 

CASE  ESPRESSIONE1  THEN  ISTRUZIONE1  END
CASE  ESPRESSIONE2  THEN  ISTRUZIONE2  END
.
.
CASE  ESPRESSIONEn  THEN  ISTRUZIONEn  END
ISTRUZIONE PREDEFINITA   (Opzionale)   END

 

E' una struttura che ci permette di eseguire decisioni multiple. Il primo test che ha successo fa cessare l'esecuzione di tutta la struttura e fa eseguire l'istruzione ad esso associata, mentre se nessun test è soddisfatto viene eseguita (se è presente) ISTRUZIONE PREDEFINITA. Il funzionamento è il seguente: viene valutata ESPRESSIONE1 se essa fornisce un risultato vero allora viene eseguita ISTRUZIONE1 altrimenti se ESPRESSIONE1 dà un risultato non vero viene valutato ciò che contenuto nella prossima ESPRESSIONE che fornisce un risultato vero e di conseguenza eseguita l'ISTRUZIONE corrispondente appunto ad ESPRESSIONE. Se si prende in considerazione l'ipotesi o si sa che c'è la possibilità che nessuna condizione verrà soddisfatta si può aggiungere un'ISTRUZIONE PREDEFINITA che verrà quindi eseguita solo in tal caso.

Esempio:

« ® a b « CASE a b == THEN "I numeri sono uguali" END CASE a b > THEN a "Il maggiore è" ®TAG END CASE b "Il maggiore è" ®TAG END END END » »

Il programma confronta due numeri e dice se essi sono uguali o quale di loro è il maggiore. Si noti l'ISTRUZIONE PREDEFINITA CASE b "Il maggiore è" ®TAG END che verrà eseguita soltanto se a e b non sono uguali e se a non è maggiore di b.

 

STRUTTURE DI CONTROLLO ITERATIVE

 

VALORE INIZIALE  VALORE FINALE  START  ESPRESSIONE  NEXT

 

La struttura esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALE.  Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso) e avviene con un incremento di un'unità.

Esempio:

« ® a « 1 3 START sin(a) NEXT » »

 

Il programma prende un valore a dal primo livello della catasta e per tre volte esegue il comando sin(a), se ad esempio a = 90 (con la modalità per gli angoli impostata in radianti) si ottengono i tre numeri identici: 1 1 1, cioè il programma ha eseguito sin(a) tre volte. La struttura va da VALORE INIZIALE a VALORE FINALE con un incremento di un'unità

 

VALORE INIZIALE  VALORE FINALE  START  ESPRESSIONE  INCREMENTO  STEP

 

La struttura è simile alla precedente (è equivalente se si pone un INCREMENTO uguale a 1). Essa esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALEcon incrementi di valori arbitrari definiti da INCREMENTO. Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso) e avviene con un incremento di un'unità espressa da INCREMENTO.

 

VALORE INIZIALE  VALORE FINALE  FOR CONTATORE ESPRESSIONE  NEXT

 

E' uno dei costrutti ciclici più utili. La struttura esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALE incrementando di un'unità la variabile CONTATORE (che eventualmente si può richiamare in qualsiasi momento e quindi utilizzarla all'interno di ESPRESSIONE). Il nome della variabile CONTATORE è un nome di una generica variabile.  Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso)e avviene incrementando di un'unità la variabile CONTATORE.

 

Esempio1:

« 1 SWAP FOR p p NEXT »

Questo programma mette in catasta la variabile contatore p, dal suo valore iniziale al suo valore finale. Inserire un numero in catasta e usare il programma. Il numero inserito in questo caso è il valore massimo (ultimo) che la variabile p assumerà. 

 

Esempio2:

« 1 1 3 ROLL FOR p p * NEXT »

Questo programma calcola il fattoriale di un numero intero presente nel primo livello della catasta (vedi il comando incorporato: !)

 

 

VALORE INIZIALE  VALORE FINALE  FOR  CONTATORE  ESPRESSIONE  INCREMENTO  STEP

 

E' il costrutto ciclico più utile (è equivalente al precedente se si pone un INCREMENTO uguale a 1). La struttura esegue ESPRESSIONE che può essere un comando (o una serie di comandi o una serie di programmi) un numero di volte compreso tra VALORE INIZIALE e VALORE FINALE incrementando di un'unità definita da INCREMENTO la variabile CONTATORE (che eventualmente si può richiamare in qualsiasi momento e quindi utilizzarla all'interno di ESPRESSIONE). Il nome della variabile CONTATORE è un nome di una generica variabile.  Il numero di volte della reiterazione va quindi dal VALORE INIZIALE (compreso) al VALORE FINALE (compreso)e avviene incrementando di un'unità definita da INCREMENTO la variabile CONTATORE.

 

DO  ESPRESSIONE  UNTIL  ESPRESSIONE TEST  END

 

Il comando o i comandi, il programma o i programmi contenuti in  ESPRESSIONE vengono eseguiti ripetutamente, fino a quando il loro risultato non è uguale (o non verifica) ciò che è contenuto (o quel che è richiesto) in  ESPRESSIONE TEST

 

WHILE  ESPRESSIONE TEST  REPEAT  ESPRESSIONE  END

 

Il comando o i comandi, il programma o i programmi contenuti in  ESPRESSIONE vengono eseguiti solo se  ESPRESSIONE TEST fornisce un risultato vero (un 1 logico)

 

STRUTTURE PER LA CATTURA DEGLI ERRORI

 

IFERR ESPRESSIONE1  THEN  ESPRESSIONE2  END 

 

Se si genera un errore nei comandi o nei programmi contenuti in ESPRESSIONE1  vengono eseguite le istruzioni contenute in  ESPRESSIONE2, mentre se ESPRESSIONE1 dà un risultato privo di errore allora il costrutto fornisce un 1. In genere questa struttura si usa per evitare di far comparire un messaggio di errore e quindi interrompere consequenzialmente il programma. Se ad esempio si sa a priori che un certo programma può generare un errore, si inserisce il comando come ESPRESSIONE1. Se non si verifica alcun errore, il comando viene eseguito regolarmente, mentre se si verifica l'errore il comando non viene eseguito ma viene eseguita ESPRESSIONE2.

Esempio:

Il programma seguente cattura l'errore 0/0 (zero diviso zero) fornendo in tal caso (se a e b sono contemporaneamente nulli) il messaggio "Forma indeterminata". Se non viene rilevato alcun errore si ha il valore logico 1.

« ® a b « IFERR a b / THEN "Forma indeterminata" END » »

 

IFERR  ESPRESSIONE  THEN  ESPRESSIONE1  ELSE  ESPRESSIONE2  END

 

Se si verifica un errore nei comandi o nei programmi contenuti in  ESPRESSIONE l'errore viene ignorato e viene eseguita ESPRESSIONE1. Se invece in ESPRESSIONE non si verifica alcun errore viene eseguita sia ESPRESSIONE che successivamente ESPRESSIONE2

Esempio:

« ® a b « IFERR a b / THEN "Programma1" ELSE "Programma2" END » »

 

COMANDI  PROGRAMMABILI

 

Esporrò adesso di seguito il funzionamento di molti (ma non di tutti) comandi incorporati nella ROM del calcolatore e in linea di massima accessibili da qualche menu. Se non si ricorda il menu dove essi risiedono non c'è nulla di più semplice che digitarli così come sono scritti. In questa pagina essi sono elencati in ordine alfabetico, ho fatto in modo tuttavia che essi siano consultabili sia appunto in ordine alfabetico che per per tipo di oggetti a cui si riferiscono (considerare il frame di sinistra).

 

ADD

Con questo comando si possono sommare tra di loro gli elementi di due liste aventi lo stesso numero di elementi. In pratica al primo elemento della prima lista (presente nel secondo livello della catasta) viene sommato il primo elemento della seconda lista (presente nel primo livello della catasta), al secondo elemento della prima lista viene sommato il secondo elemento della seconda lista... e così via per tutti gli altri elementi

Esempio:

Se si hanno in catasta le due liste dell'immagine:

ADD

usando ADD otteniamo la nuova lista:

ADD

 

BEEP

Il comando permette di far emettere un bip (un suono più o meno prolungato) ad una determinata frequenza f in Hertz per un certo numero n di secondi. Inserire un numero che indica la frequenza del suono e un altro numero che indica la durata del suono e premere BEEP.

Esempio:

« 1000 1 BEEP »

Il programma emette un suono alla frequenza di 1000 Hz per un secondo.

Si possono costruire mediante questo comando dei motivi musicali, come il seguente da copiare, o da scaricare e trasferire al calcolatore

« 165 .25 BEEP .25 WAIT 185 .125 BEEP 196 .25 BEEP .25 WAIT 156 .125 BEEP 165 .125 BEEP .125 WAIT 185 .125 BEEP 196 .125 BEEP .125 WAIT 262 .125 BEEP 247 .125 BEEP .125 WAIT 165 .125 BEEP 196 .125 BEEP .125 WAIT 247 .125 BEEP 233 .75 BEEP 220 .125 BEEP 196 .125 BEEP 165 .125 BEEP 147 .125 BEEP 165 .5 BEEP .5 WAIT 156 .125 BEEP 165 .25 BEEP .25 WAIT 185 .125 BEEP 196 .25 BEEP .25 WAIT 156 .125 BEEP 165 .125 BEEP .125 WAIT 185 .125 BEEP 196 .125 BEEP .125 WAIT 262 .125 BEEP 247 .125 BEEP .125 WAIT 196 .125 BEEP 247 .125 BEEP .125 WAIT 330 .125 BEEP 311 .75 BEEP .5 WAIT 156 .125 BEEP 165 .25 BEEP .25 WAIT 185 .125 BEEP 196 .25 BEEP .25 WAIT 156 .125 BEEP 165 .125 BEEP .125 WAIT 185 .125 BEEP 196 .125 BEEP .125 WAIT 262 .125 BEEP 247 .125 BEEP .125 WAIT 165 .125 BEEP 196 .125 BEEP .125 WAIT 247 .125 BEEP 233 .75 BEEP 220 .125 BEEP 196 .125 BEEP 165 .125 BEEP 147 .125 BEEP 165 .5 BEEP .5 WAIT 330 .125 BEEP .125 WAIT 294 .125 BEEP 247 .125 BEEP .125 WAIT 220 .125 BEEP 196 .125 BEEP .125 WAIT 165 .125 BEEP 233 .125 BEEP 220 .125 BEEP .125 WAIT 233 .125 BEEP 220 .125 BEEP .125 WAIT 233 .125 BEEP 220 .125 BEEP .125 WAIT 233 .125 BEEP 220 .125 BEEP .125 WAIT 196 .125 BEEP 165 .125 BEEP 147 .125 BEEP 165 .125 BEEP 165 .5 BEEP .75 WAIT »

CHOOSE

Il comando consente di creare una finestra rettangolare di selezione partendo da una stringa, una lista e un numero. La lista può contenere altre liste o stringhe. La stringa rappresenta il titolo della finestra, gli elementi contenuti nella lista le varie righe della finestra; il numero può assumere i valori  1 e qualsiasi numero minore o uguale a zero. Selezionando una riga e premendo ENTER o OK viene inserita nel secondo livello della catasta ciò che è contenuto nella riga e nel primo livello della catasta il valore 1, mentre uscendo viene messo nel primo livello cella catasta uno zero. Con il numero minore o uguale a zero, il rettangolo viene sì visualizzato avendo la possibilità di far scorrere in rassegna le eventuali scritte di ogni riga ma non di immettere sul primo livello della catasta nessuna di tali righe. Il numero massimo di caratteri visualizzati completamente per ogni riga è 15.

Esempio1:

« "Titolo" { RIGA1 RIGA2 RIGA3 RIGA4 RIGA5 } 1 CHOOSE »

CHOOSE

Esempio2:

« "Titolo" { RIGA1 RIGA2 RIGA3 RIGA4 RIGA5 } 0 CHOOSE »

CHOOSE

 

CHR

Il calcolatore ha un set di 256 caratteri (in realtà essi possono sembrare 222 o 223!). Si può accedere ad essi con varie combinazioni dei tasti, oppure accedendo alle schermate che li visualizzano tutti premendo il TASTO DI COMMUTAZIONE A DESTRA quindi PRG (vedi NUM).

Il comando CHR converte un numero in una stringa contenente il carattere corrispondente. Il numero massimo di caratteri diverso è 256, dopo si ricomincia con periodicità 256.

 

Esempio1:

« 145 CHR »

CHR

Esempio2:

« 401 CHR »

CHR

Esempio3:

Il seguente programma mette nei vari livelli della catasta tutti i caratteri del calcolatore in ordine crescente

« 0 255 FOR c c CHR NEXT »

 

CLLCD

Consente di visualizzare lo schermo della catasta vuoto con le etichette di menu attuale (ciò che è contenuto in catasta non viene cancellato, bensì solamente non visualizzato).

« CLLCD »

 

CONVERT

Mediante questo comando si possono convertire unità di misura congruenti. Se ad esempio si vuol sapere quanti centimetri sono contenuti in un metro, vale a dire un metro a quanti centimetri equivale, inseriamo l'unità 1_m nel secondo livello della catasta e l'unità 1_cm nel primo livello quindi premiamo CONVERT. Per vedere a quanti centimetri equivale un pollice inseriamo nell'ordine 1_in e 1_cm, premiamo CONVERT ed otteniamo 2,54_cm. 

 

DECR

Il comando prende il nome di una variabile numerica (cioè di un numero memorizzato con un nome) e la decrementa di un'unità, fornisce la variabile decrementata e rimemorizza la variabile numerica decrementata di 1.

Esempio: se N è il nome della variabile 25, inserendo il nome 'N' nel primo livello della catasta e premendo DECR otteniamo il numero 24 nel primo livello della catasta ed N memorizzata con il nuovo valore 24.

 

DET

Il comando calcola il determinante di una matrice a coefficienti numerici (ovviamente quadrata) presente nel primo livello della catasta mettendo il valore del determinante nel primo livello al posto della matrice di origine.

 

DISP

Il comando visualizza istantaneamente un oggetto b in una riga n  dello schermo. Le linee sono 7, quindi n va da 1 a sette. Se n=1 l'oggetto sarà visualizzato nella riga superiore dello schermo, se n=2 l'oggetto verrà visualizzato nella seconda riga e così via. Se l'oggetto è una stringa i separatori non vengono visualizzati.

Il numero massimo di caratteri visualizzati per ogni riga è 22.

Si usa spessissimo assieme a FREEZE e a CLLCD.

 

Esempio1:

« "1234567891234567891234" 1 DISP 3 FREEZE »

 

DISP

 

Esempio2:

« CLLCD "1234567891234567891234" 1 DISP 3 FREEZE »

DISP

 

Esempio3:

« CLLCD "1 2 3" 1 DISP "2 4 6" 2 DISP "3 6 9" 3 DISP 3 FREEZE »

 

DISP

Esempio4:

« CLLCD "1-sin(x)" 1 DISP 3 FREEZE »

 

DISP

 

DOERR

Il comando consente di abbandonare l'esecuzione di un programma e di visualizzare un messaggio nelle prime due righe del display rappresentato da una stringa (contenente un numero massimo di 44 caratteri) emettendo nel contempo anche un effimero bip, in pratica si usa come messaggio di errore.

 

Esempio1:

« ® a b « IF a TYPE b TYPE == THEN a TYPE Tipo ®TAG ELSE "Attenzione: elementi di diverso tipo" DOERR END » »

 

DOERR

Il comando può visualizzare pure dei messaggi di errore incorporati nella memoria ROM del calcolatore. In questo caso far precedere il comando DOERR da un numero n compreso tra gli intervalli:

1 £ n £ 16

513 £ n £ 520

257 £ n £ 317

1281 £ n £ 1286

o che vale 2812 2817 58368 58372 ecc...

N.B.

Tali numeri si possono "scovare" eseguendo il programmino  « ERRM ERRN » subito dopo che si presenta un errore ;-)

 

Esempio2 :

« 1 DOERR »

 

DOLIST

Il comando applica (esegue) un comando o un programma agli elementi di un certo numero di liste aventi tutte la medesima dimensione, e fornisce un'unica lista con gli elementi delle tre liste combinati. Inserire nell'ordine: le liste, un numero intero che indica a quante liste applicare il comando o il programma, e quindi il comando o il programma.

In pratica il comando o il programma viene applicato "verticalmente" ai primi, ai secondi, ai terzi... ecc. elementi del numero di liste specificato.

Esempio1:
Inserire nella catasta nell'ordine:

{A B C}
{D E F}
{G H I}
2

« + »

Premere DOLIST

 

Esempio2:
Inserire nella catasta nell'ordine:

{A B C}
{D E F}
{G H I}
3

« + + »

Premere DOLIST

 

Esempio3:
Inserire nella catasta nell'ordine:

{A B C}
{D E F}
2

« IF SAME THEN "El. uguali" ELSE "El. diversi" END »

Premere DOLIST

 

DOSUBS

Il comando appplica un programma o un comando (inserito entro gli indicatori di programma) ad un determinato numero di elementi inseriti in una lista. Inserire quindi nell'ordine: una lista, il numero di elementi a cui applicare il comando o il programma e quindi il programma o il comando.

In pratica il numero che bisogna inserire indica il numero di elementi presi per volta (a partire dal primo) cui applicare il programma o il comando.

Esempio:

Si abbia la lista { A B C D } ed il programma « 1 + » Se come numero inseriamo 1 otteniamo la lista { 'A+1'  'B+1 'C+1' 'D+1' }, vale a dire che il il programma « 1 + » viene applicato ad un elemento a partire dal primo, ad un elemento a partire dal secondo, ad un elemento a partire dal terzo, ad un elemento a partire dal quarto, ovvero ad ogni elemento della lista, ed in questo caso equivale ad usare DOLIST. Se invece usiamo il numero 2 otteniamo la lista { A 'B+1' B 'C+1' C 'D+1' } cioè significa che prendiamo i primi due elementi A e B e applichiamo il programma, poi prendiamo gli elementi B e C e applichiamo il programma, poi prendiamo gli elementi C e D ecc (cioè come se si eseguissero « ® A B « 1 + » »  « ® B C « 1 + » » « ® C D « 1 + » »  all'interno della lista). Se inseriamo il numero 3 otteniamo la lista { A B 'C+1' B C 'D+1' } cioè significa che prendiamo gli elementi A B C ed applichiamo loro il programma, poi prendiamo gli elementi B C D ed applichiamo loro il programma (cioè come se si eseguissero « ® A B C « 1 + » » « ® B C D « 1 + » » all'interno della lista). Infine se usiamo il numero 4 otteniamo la lista { A B C 'D+1' }, vale a dire abbiamo preso tutti gli elementi A B C D ed abbiamo applicato loro il programma (cioè come se si eseguisse « ® A B C D « 1 + » » all'interno della lista)

 

DUP

Il comando duplica un qualsiasi oggetto presente nel primo livello della catasta e mette l'originale nel secondo livello e la copia nel primo (equivale a premere ENTER quando si usa la catasta)

 

DUP2

Il comando duplica due oggetti presenti nei primi due livelli della catasta. Esso fornisce le due copie nei primi due livelli e gli originali nei livelli 3 e 4.

 

DUPN

Dati N oggetti presenti in catasta, il comando effettua la copia degli N oggetti fornendo nei livelli da 1 a N le copie e nei livelli da N a 2*N gli originali oggetti.

 

EGV

Il comando permette di determinare gli autovettori e gli autovalori di una matrice quadrata  a coefficienti numerici. Inserire la matrice e premere EGV.

 

EGVL

Data una matrice quadrata di ordine n a coefficienti numerici il comando fornisce un vettore di n elementi che rappresentano gli autovalori della matrice.

Es:

Se la matrice è questa rappresentata nell'immagine

EGVL

usando EGVL otteniamo il risultato riportato nell'immagine seguente

EGVL

 

FREEZE

Il comando blocca (congela) una schermata finché non si preme un tasto. Inserire un numero, (3 generalmente), e premere FREEZE. Se si ha visualizzato l'orologio si noterà che questo si ferma. Utilizzato assieme al comando DISP permette di mantenere sullo schermo un determinato messaggio indefinitamente. Utilizzato assieme al comando CLLCD consente di visualizzare delle scritte sopra uno schermo vuoto.

Esempio:

« CLLCD "Ma mi faccia il piacere!" 1 DISP 3 FREEZE »

 

FREEZE

 

GET

Il comando estrae un elemento contenuto in una lista o in una matrice. Se si deve estrarre un elemento da una lista o da un vettore utilizzare nell'ordine: la lista (o nome della lista se questa è memorizzata con tale nome) e un numero che indica la posizione dell'elemento da estrarre (1 = primo elemento, 2 = secondo elemento ecc...)

Esempio1:

« { 1 3 g k } 3 GET »

Fornisce la lettera g, cioè il terzo elemento della lista.

Per una matrice bidimensionale invece usare nell'ordine: la matrice  (o nome della matrice se questa è memorizzata con tale nome) e una lista contenente due numeri, il primo indica la riga e il secondo la colonna in cui si trova l'elemento da estrarre.

Esempio2:

« [[1 2] [4 5]] { 1 2 } GET »

Fornisce l'elemento 2 (a12)

 

HEAD

Il comando permette di tirare fuori (estrarre) il primo elemento di una lista o di una stringa contenenti almeno un elemento. Inserire la lista o la stringa e premere HEAD

 

INCR

Il comando prende il nome di una variabile numerica (cioè di un numero memorizzato con un nome)e la incrementa di un'unità, fornisce la variabile incrementata e rimemorizza la variabile numerica incrementata di 1.

Esempio: se N è il nome della variabile 25, inserendo il nome 'N' nel primo livello della catasta e premendo INCR otteniamo il numero 26 nel primo livello della catasta ed N memorizzata con il nuovo valore 26.

 

INFORM

Il comando consente di creare uno schermo di inserimento valori (tipo numeri, espressioni algebriche o altro). Per funzionare necessita di 5 elementi, che sono nell'ordine:

  1. Una stringa (anche vuota), avente un numero massimo di 31 caratteri, che rappresenta il titolo dello schermo.
  2. Una lista contenente una o più stringhe (o anche delle liste, che a loro volta possono contenere una o più stringhe anche vuote) che rappresentano i nomi degli elementi fissi.
  3. Una lista formata da due numeri (generalmente il primo numero assume i valori uno o due o tre). Con il numero 1 si ha la possibilità di visualizzare su una riga (di lunghezza stabilita dal secondo numero della lista) le eventuali informazioni iniziali e quindi i valori che si inseriscono. Con il numeri 2 le informazioni vengono riportate in una riga che occupa (se il secondo numero della lista lo consente) metà schermo. Con il numero 3 invece le informazioni vengono visualizzate su righe brevi. Il secondo numero della lista indica praticamente la distanza da ciò che è visualizzato secondo quello che è contenuto nella lista descritta nel punto 2. Più grande è il numero maggiore è la distanza.
  4. Una lista con degli elementi (numeri, stringhe o altro) i quali compaiono quando si esegue un RESET, volendo si può inserire una lista vuota.
  5. Una lista contenente elementi che compaiono accanto a ciò che è contenuto nella lista descritta al punto 2. E' da precisare che queste due ultime liste (nel caso si opti per la lista descritta al punto 4 non vuota) devono avere lo stesso numero di elementi di quella descritta al punto 2

I valori inseriti vengono poi immessi in una lista, se un elemento non viene inserito entro la lista compare il nome NOVAL.

 

Esempio1:

« "Schermo inserimento valori" { "valore1" "valore2" "valore3" } { 3 1} {} {} INFORM »

 

INFORM

 

 

Esempio2:

« "Schermo inserimento valori" { "valore1" "valore2" } { 1 2 } { A B } {} INFORM »

 

INFORM

 

INPUT

Il comando interrompe l'esecuzione di un programma, prende due stringhe, una con scritto qualcosa e una vuota, e visualizza uno schermo contenente lo scritto dentro la prima stringa, sopra la catasta, e il cursore lampeggiante che richiede di immettere un valore.

 

Esempio:

 

INPUT

Premendo INPUT si ottiene:

INPUT

 

DLIST

Il comando prende una lista dal primo livello della catasta contenente n elementi (minimo due elementi), e fornisce una nuova lista di n-1 elementi, in cui ognuno di essi risulta essere la differenza tra l'elemento che sta a destra e quello che sta alla sua immediata sinistra, iniziando a sottrarre dall'ultimo elemento della lista iniziale. Gli elementi contenuti nella lista di partenza possono essere numeri (reali o complessi), unità di misura, oggetti algebrici, matrici (naturalmente aventi tutti la medesima dimensione).

Esempio1:

si abbia la lista { 1 2 3 4 } premendo il comando DLIST otteniamo la nuova lista { 1 1 1 }

Esempio2:

si abbia la lista { 12_cm   2_m } premendo il comando DLIST otteniamo la nuova lista { 188_cm }

 

Esempio3:

si abbia la lista { 'x-2'  'ln(x-2)' } premendo il comando DLIST otteniamo la nuova lista { 'ln(x-2)-(x-2)' }

 

Esempio4:

si abbia la lista { 'A'  'B'   'C'   'D'  'E' } premendo DLIST otteniamo la nuova lista { 'B-A'  'C-B'  'D-C' 'E-D'  }

 

­MATCH

Il comando  consente di sostituire una sottoespressione
(un'espressione contenuta entro un'altra espressione) o un'espressione, con un'altra sottoespressione o espressione (che gioco di parole!). Se la sostituzione va a buon fine si ottiene nella catasta la nuova espressione manipolata con la sostituzione che si è effettuata e il numero 1 (che è da interpretarsi come un uno logico), se invece la sostituzione ha esito negativo ossia non si trova l'espressione che si vuol sostituire, si riottiene l'espressione iniziale e il numero 0 (che è da interpretarsi come un uno logico). Inserire nell'ordine: l'espressione da manipolare nel livello 2 e una lista comprendente l'elemento da manipolare e l'elemento che si deve mettere al suo posto. Facoltativamente entro la lista, come terzo elemento, si può inserire un eventuale condizione di test. Si può usare il carattere speciale & (ampersand)come prefisso ad un elemento per indicare la genericità del nome. Il test è un'espressione del tipo "&A==0" "&A<5".

Esempio1:

Il programma seguente sostituisce l'espressione o la sottoespressione INV(&A)(cioè INV di un elemento generico) con 1/&A (cioè con uno diviso lo stesso elemento generico:

« { 'INV(&A}' '1/&A' } ­MATCH »

Il programma è utile quando si vuol avere un' espressione senza INV

 

Esempio2:

Quest'altro programma prende un generico numero complesso (a, b) e lo mette nella forma a+i*b.

« { &A 'RE(&A)+i*IM(&A)'­MATCH DROP EVAL »

Ad esempio se si ha un'espressione contenente molti numeri complessi, applicando il programma, si ottiene l'espressione con tutti i numeri complessi nella forma simbolica a+i*b

Esempio3:

« { '&A^&B' '(1/&A)^-&B' '&B<0'­MATCH DROP EVAL »

Il programma trasforma le espressioni con esponente numerico negativo, in espressioni con esponente numerico positivo. Si noti la presenza della condizione, che fa sì che la sostituzione avvenga solo se l'esponente è negativo.

 

¯MATCH

Il comando è perfettamente analogo al precedente, con l'unica differenza che la sostituzione avviene per prima nelle espressioni di livello superiore, cioè quelle che contengono le sottoespressioni.

 

MSGBOX

Consente di creare una finestra con un messaggio racchiuso dentro una stringa. La finestra mostrerà un massimo di 5 righe contenenti ognuna un massimo di 15 caratteri. Si possono visualizzare più finestre, in questo caso inserire le stringhe entro una lista: premendo ok si visualizza la finestra successiva.

Esempio:

Memorizzare questo programma con un nome

« "Attenzione ad inserire i dati corretti" MSGBOX » eseguendolo si crea la finestra

MSGBOX

 

NUM

Il comando permette di identificare il codice di un carattere: il carattere deve essere contenuto dentro una stringa. Se nella stringa sono presenti più caratteri, di questi viene fornito il codice soltanto del primo. Per accedere alle schermate con tutti i caratteri premere il TASTO DI COMMUTAZIONE A DESTRA (il tasto verde con la freccia) quindi PRG.

Nota: Attenzione al carattere di a capo che ha valore di codice 10!

CARATTERI 0-63

CARATTERI 64-127

CARATTERI 128-191

CARATTERI 192-255

Esempio:

Il programma seguente permette di distinguere un carattere entro una stringa.

« NUM IF 82 ‹ THEN "Si tratta di una R" END »

 

OBJ®

Di un oggetto, dà i componenti che lo costituiscono, cioè in pratica lo scompone. OBJ®  può sostituire i comandi più specifici LIST® ARRY® STR®, usati per decomporre rispettivamente liste, matrici (vettori), stringhe. Consiglio di adoperare i comandi più appropriati al posto del generico OBJ® sfruttando così quest'altra potenzialità e specificità.

 

OVER

Il comando consente di ottenere la copia di un oggetto che si trova nel secondo livello della catasta direttamente nel primo livello (naturalmente in catasta si devono avere almeno due elementi)

Esempio:

OVER

Premendo OVER si ha:

OVER

 

PICK

Il comando consente di ottenere la copia di un oggetto che si trova nel livello n della catasta direttamente nel primo livello (naturalmente in catasta si devono avere almeno n elementi)

Esempio:

PICK

Premendo 3 PICK si ottiene

PICK

 

POS

Il comando fornisce la posizione di una sottostringa o carattere contenuto in una stringa, o di un oggetto contenuto in una lista. Se quanto cercato viene trovato si ottiene la sua posizione, altrimenti uno zero logico.

Ad esempio se inseriamo la stringa "Oggi c'è bel tempo" e subito dopo la stringa "tempo" otteniamo come risultato il numero 14, che indica che la dicitura "tempo" si trova nella stringa a partire dalla posizione 14. Se inseriamo la lista {a b c) e quindi il nome a, premendo POS otteniamo 1:

 

PUT

Il comando consente di sostituire un elemento all'interno di una lista o di una matrice (o di un vettore) con un altro elemento. In pratica il nuovo elemento andrà a situarsi al posto dell'altro. Per quel che concerne le liste inserire nell'ordine: una lista, l'oggetto da inserire al posto di un altro presente in lista, e un numero che indica la posizione dell'oggetto da sostituire.

Esempio:

Nella lista { 1 2 3 4 } sostituiamo il secondo elemento, cioè il numero 2 con il numero 9. Inserendo la lista, il numero 9, il numero 2 premiamo PUT otteniamo la nuova lista { 1 9 3 4 }

 

Per quel che concerne le matrici inserire nell'ordine: la matrice, una lista formata da due numeri che indicano le coordinate (riga e colonna) dell'elemento da sostituire (se si ha un vettore riga o colonna, al posto della lista inserire un numero soltanto), e l'elemento da inserire al posto di un altro presente nella matrice,.

Esempio:

Se si ha la matrice rappresentata dall'immagine:

PUT

e vogliamo sostituire l'elemento a22 4 con il numero 8 inseriamo quindi la matrice, la lista { 2 2 } e il numero 8 creando in catasta la situazione rappresentata dall'immagine:

PUT

premendo PUT otteniamo la matrice:

PUT

 

REPL

Il comando permette di sostituire una parte di un oggetto - posizionato nel terzo livello della catasta - a partire da una posizione iniziale espressa da un numero - posizionato nel secondo livello della catasta - con un opportuno oggetto - posizionato nel primo livello della catasta.

Gli oggetti che il comando tratta sono: liste, stringhe, matrici, oggetti grafici.

E' da precisare che l'oggetto che risiede nel primo livello e che vogliamo inserire nell'oggetto iniziale deve essere contenuto entro lo stesso tipo di simboli identificatori dell'oggetto del livello 3.

Esempio:

Se nel terzo livello posizioniamo la stringa "Ciao  ciao  ciao" (dove tra il secondo e il terzo ciao sono inseriti due spazi), nel secondo livello il numero 6 e nel primo livello la stringa "salve", premendo REPL otteniamo la nuova stringa "Ciao  ciao   salve".

 

Esempio:

Se nel terzo livello posizioniamo la lista { 1 2 3 4 }, nel secondo livello il numero 3 e nel primo livello la lista { a }, premendo REPL otteniamo la nuova lista { 1 2 a 4 }

 

REVLIST

Il comando inverte la posizione degli elementi entro una lista. Se ad esempio la lista è {A B C} esso dà come risultato la lista {C B A}. In pratica il primo elemento della lista viene scambiato con l'ultimo, il secondo con il penultimo e così via.

 

ROT

Il comando si applica a tre elementi, messi in catasta ad esempio, e permette di ruotarli (equivale a 3 ROLL)

Esempio:

ROT

premendo ROT si ottiene:

ROT

 

SCON

Il comando prende il nome X di una variabile, applica il comando CONJ (coniugato) al contenuto della variabile e memorizza la nuova variabile coniugata con lo stesso nome iniziale X

Esempio:

Se EQ è il nome dell'espressione algebrica '(x2-a)' inserendo il nome 'EQ' e premendo SCON si ottiene l'espressione 'CONJ(x2-a)' memorizzata in 'EQ'

 

SEQ

Il comando crea una lista (genera una sequenza di valori) in base ad un'espressione contenuta nel quinto livello della catasta la quale espressione sia rispetto ad una variabile specificata nel quarto livello della catasta, partendo da un valore iniziale inserito nel terzo livello della catasta fino ad un valore finale inserito nel secondo livello della catasta con incremento di un determinato valore inserito nel primo livello della catasta.

In pratica vengono attribuiti dei valori incrementali ad un'espressione in una (o più variabili) che viene valutata di volta in volta e ogni valutazione costituisce un elemento della lista finale.

Esempio:

5:   'X'
4:   'X'
3:     1
2:     5
1:     1

Premendo SEQ otteniamo la lista { 1 2 3 4 5 }

Esempio:

5:   'X^2'
4:     'X'
3:      1
2:      5
1:      1

Premendo SEQ otteniamo la lista { 1 4 9 16 25 }

 

SHOW

Il comando consente di valutare solo le variabili non specificate di un'espressione algebrica o anche quelle locali che sono richiamate da un'espressione in un programma.

Inserire l'espressione nel secondo livello della catasta e inserire nel pimo livello una lista contenente i nomi (o il nome) delle variabili da non valutare.

Esempio:

Sia 'EQ' l'espressione 'A+B+C'. Dopo aver memorizzato i valori 1, 2 ,3 rispettivamente con i nomi 'A' 'B' 'C', inseriamo l'espressione nel secondo livello della catasta e la lista {A B } nel primo livello. Premendo SHOW otteniamo l'espressione 'A+B+3' cioè l'espressione con A e B non valutate numericamente.

Esempio:

Il programma seguente prende due numeri dalla catasta e fornisce un'espressione con una variabile locale valutata in un numero (che è quello che prende dalla catasta) e una variabile locale non valutata

« ® a b « 'a^2+b^2' { a } SHOW » »

Inserendo 1 e 2 in catasta ed eseguendo il programma otteniamo 'a^2+4'

 

SINV

Il comando prende il nome X di una variabile, applica il comando INV al contenuto della variabile e memorizza la nuova variabile invertita con lo stesso nome iniziale X

Esempio:

Se EQ è il nome dell'espressione algebrica '(x2-x-a)' inserendo il nome 'EQ' e premendo SINV si ottiene l'espressione 'INV(x2-x-a)' memorizzata in 'EQ'

 

SIZE

Il comando fornisce il numero di elementi di:

Un oggetto algebrico (un'espressione algebrica)

Una matrice

Una lista

Una stringa

Un oggetto grafico

Immettere l'oggetto adatto quindi e  premere SIZE

 

SNEG

Il comando prende il nome X di una variabile, applica il comando NEG (negazione, cioè cambio del segno) al contenuto della variabile e memorizza la nuova variabile cambiata di segno con lo stesso nome iniziale X

Esempio:

Se EQ è il nome dell'espressione algebrica '(x2-x-a)' inserendo il nome 'EQ' e premendo SNEG si ottiene l'espressione '-(x2-x-a)' memorizzata in 'EQ'

 

SOLVEQN

Il comando apre il programma di risoluzioni di un insieme di equazioni contenute nella libreria di equazioni incorporate nella ROM del calcolatore. Inserire nel livello 3 un numero che rappresenta l'argomento, nel secondo livello un numero che rappresenta il titolo dell'argomento, e nel primo livello della catasta il numero uno o zero - tale numero stabilisce se un eventuale immagine associata all'argomento che si sta trattando deve o meno essere copiata nell'ambiente PICTURE: uno sì, zero no. Gli argomenti e i loro relativi numeri si possono ottenere aprendo la libreria di equazioni.

Esempio:

Inserendo i numeri 2, 6, 1, cioè facendo in modo che la catasta corrisponda a:

3:        2
2:        6
1:        1

e premendo SOLVEQN si apre il risolutore di equazioni con l'argomento riguardante le resistenze in serie e in parallelo. Andando nell'ambiente PICTURE inoltre si può vedere l'immagine associata all'argomento.   

 

SORT

Il comando prende una lista e la riordina partendo dal più piccolo elemento al più grande. Se ad esempio la lista iniziale è formata dai seguenti numeri: { 1 6 -5 0 -10 }, usando il comando SORT otteniamo la lista {-10 -5 0 1 6 }. All'interno della lista possono essere contenute anche stringhe o semplicemente dei nomi di lettere senza alcun separatore, in questo due casi gli elementi verranno ordinati alfabeticamente considerando le iniziali di tali stringhe o nomi senza separatori.

 

SORTSEQ

Equivale a SORT

 

STO*

Il comando permette di moltiplicare una variabile memorizzata con un nome per un opportuno oggetto, vale a dire una variabile che può essere moltiplicata. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile essere un fattore senza che si abbia errore.

Esempio:

Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-f', possiamo moltiplicare essa per una costante o per un'altra espressione, ad esempio 'x2-x-a' semplicemente inserendo 'EQ' 'x2-x-a' e premendo STO*, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore '(x-f)*(x2-x-a)'. Se inseriamo invece nell'ordine 'x2-x-a' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-x-a)*(x-f)'

 

STO+

Il comando permette di aggiungere un opportuno oggetto ad una variabile memorizzata, con un nome. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile "sommare" un altro oggetto.

Esempio:

Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-2', possiamo aggiungere ad essa una costante o un'altra espressione, ad esempio 'x2-1' semplicemente inserendo 'EQ' 'x2-1' e premendo STO+, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore 'x-2+(x2-1)'. Se inseriamo invece nell'ordine 'x2-1' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-1)+(x-2)'

 

STO-

Il comando permette di togliere un opportuno oggetto ad una variabile memorizzata, con un nome. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile "sottrarre" un altro oggetto.

Esempio:

Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-2', possiamo togliere ad essa una costante o un'altra espressione, ad esempio 'x2-x-a' semplicemente inserendo 'EQ' 'x2-x-a' e premendo STO-, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore 'x-2-(x2-x-a)'. Se inseriamo invece nell'ordine 'x2-x-a' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-x-a)-(x-2)'

 

STO/

Il comando permette di dividere una variabile memorizzata con un nome per un opportuno oggetto, vale a dire una variabile che può essere un divisore. Ho scritto opportuno in quanto la variabile naturalmente deve essere un oggetto cui è possibile essere un divisore senza che si abbia errore.

Esempio:

Se EQ è il nome di una variabile che contiene l'espressione algebrica 'x-f', possiamo dividere essa per una costante o per un'altra espressione, ad esempio 'x2-x-a' semplicemente inserendo 'EQ' 'x2-x-a' e premendo STO/, otteniamo allora una nuova espressione algebrica memorizzata con il nome EQ avente valore '(x-f)/(x2-x-a)'. Se inseriamo invece nell'ordine 'x2-x-a' 'EQ' e premiamo STO+, otteniamo l'espressione algebrica memorizzata con il nome EQ avente invece valore '(x2-x-a)/(x-f)'

 

STREAM

STREAM può essere usato in due modi.

1° uso

Esso applica un programma o un comando (inserito entro gli indicatori di programma) ad ogni elemento di una lista meno il primo.

Esempio:

Se la lista è { A B C D } ed il programma è « 1 + » STREAM fornisce il risultato:

4:        'A'
3:      'B+1'
2:      'C+1'
1:      'D+1'

2° uso

Prende i primi due elementi di ogni lista e applica loro un programma o un comando generico (tipo + ,*, -, ^) ossia un programma o un comando che richiede due elementi, poi prende questo elemento ed il successivo della lista e applica nuovamente il programma o il   comando. Il processo continua fino all'esaurimento degli elementi entro la lista.

Esempio:

Se la lista è { A B C D } e il programma è « * » STREAM fornisce il risultato: 20, vale a dire moltiplica tra di loro tutti gli elementi della lista.

Si noti che il 1° e il 2° uso dipendono da quanti elementi servono al programma contenuto nel primo livello per funzionare, cioè uno o più di uno.

 

SUB

Il comando permette di tirare fuori una parte di una stringa o di una lista o di un matrice o di un oggetto grafico (x) da una posizione iniziale (i) ad una posizione finale (f). Inserire dunque nell'ordine l'oggetto di cui si vuol estrarre una sua porzione, un numero che indica la posizione iniziale e un altro numero che indica la posizione finale

Esempio1:

« "Mi piacciono le patte fritte" 1 12 SUB »

Il programma dà come risultato:

SUB

 

®TAG

Questo comando consente di dare un nome (un'etichetta più tecnicamente) ad un oggetto, creando un nuovo oggetto così formato: NOME:OGGETTO. Il nome deve essere una stringa. Inserire l'oggetto e poi la stringa, quindi premere ®TAG

Esempio:

Se si ha il vettore [ 2 3 -5] nel secondo livello della catasta e la stringa "Vettore" nel primo livello otteniamo premendo ®TAG:

 

TAG

 

TAIL

Prende una lista o una stringa con almeno un elemento e fornisce un nuova lista o stringa con tutti gli elementi della lista o della stringa iniziale meno il primo elemento (meno il primo carattere nel caso si tratti di stringa)

Ad esempio se la lista è {A B C}, TAIL fornisce {B C}, mentre se si ha la stringa "sono nato uomo" TAIL fornisce "ono nato uomo"

 

TEACH

Il comando crea automaticamente una directory chiamata EXAMPLES dentro cui sono contenuti degli esempi di programmi e di grafici

 

TYPE

Di un oggetto ne individua il tipo dando un numero che lo identifica. Il seguente elenco enumera gli oggetti più comuni e il numero che TYPE fornisce:

TYPE    TIPO DI OGGETTO
0      Numero reale
1      Numero complesso
2      Stringa
3      Matrice a coefficienti reali
4      Matrice contenente coefficienti complessi
5      Lista
6      Nome glogale
7      Nome locale
8      Programma
9      Oggetto algebrico
10     Numero intero binario
11     Oggetto grafico
12     Oggetto ottenuto con
®TAG
13     Unità di misura
14     Il nome XLIB
15     Directory
16     Libreria
17     Oggetto di backup
25     Oggetto Code
26     Library Data

 

UBASE

Con questo comando si converte un'unità di misura qualsiasi nelle unità base del Sistema Internazionale.

Es:

Se si ha l'unità Newton per Metro, 1_N*m, inserendo tale unità nel primo livello della catasta e pemendo UBASE otteniamo 1_kg*m^2/s^2

 

UVAL

Di un oggetto unità di misura fornisce soltanto la parte numerica eliminando le unità di misura. Se si ha 34.1_erg usando UVAL otteniamo 34,1

 

VERSION

Il comando fornisce due stringhe contenenti la versione della memoria ROM incorporata nel calcolatore e l'anno di fabbrica.

Esempio:

VERSION

 

APPENDICI

 

A: LISTATI DI PROGRAMMI

 

In quest'appendice ho inserito dei programmi. Mediante essi esemplifico l'uso dell'User RPL e fornisco degli "esercizi svolti". Il metodo fondamentale per imparare un qualsiasi linguaggio di programmazione è quello di esercitarsi, cioè di realizzare molti programmi: l'esercizio continuo (l'allenamento) affina le capacità (le prestazioni). Cliccando sul nome del programma è possibile scaricarlo e, successivamente inviandolo al calcolatore, provarlo. Naturalmente essi si possono copiare sulla calcolatrice così come sono scritti. In quest'ultimo caso è utile controllare il loro checksum, che riporto. Per far ciò inserire il programma nel primo livello della catasta e premere il comando BYTES.  

 

INV.M

Il programma inverte i membri di un'equazione presente nel primo livello della catasta

checksum: # 50176d
bytes:        17,5

« EQ® SWAP =
»

 

D.2

Il programma calcola il determinante di una matrice di ordine 2 i cui 4 elementi sono inseriti nei primi 4 livelli della catasta.

checksum: # 1346d
bytes:         61

« ® A B C D
 
« A D * B C * -
»
»

 

D.3

Il programma calcola il determinante di una matrice di ordine 3 i cui 9 elementi sono inseriti nei primi 9 livelli della catasta, per funzionare necessita del precedente programma D.2.

checksum: # 1574d
bytes:        160

« ® A B C D E F G H I
I
« B C E F D.2 G *
A C D F D.2 NEG H *
A B D E D.2 I * + +
»
»

 

D.4

Il programma calcola il determinante di una matrice di ordine 4 i cui 16 elementi sono inseriti nei primi 16 livelli della catasta, per funzionare necessita dei precedenti programmi D.2 e D.3.

checksum: # 33403d
bytes:       320.5

« ® A B C D E F G H
I L M N O P Q R
  « B C D F G H L M
N D.3 O * A C D E G
H I M N D.3 NEG P *
A B D E F H I L N
D.3 Q * A B C E F G
I L M D.3 NEG R * +
+ + NEG
  »
»

 

Det

Il programma calcola il determinante di una qualsiasi matrice anche a coefficienti simbolici. Inserire nel primo livello della catasta la matrice sotto forma di lista avente gli elementi delle varie righe a sua volta racchiuse entro liste.

Es: per calcolare il determinante della seguente matrice di ordine 2 riportata nell'immagine

Matrice simbolica  i cui elementi sono quindi: a11=(X-3)^3, a12=7, a21=a^2, a22=X, inseriamo la lista: { {'(X-3)^2' 7 } {'a^2' X } }.

checksum: # 28491d
bytes:         341

« DUP SIZE ® A B
  « 0 1 B
    FOR i A i GET 1
GET A i 1 3 PICK
SIZE
      IF 1 ==
      THEN 3 DROPN
1
      ELSE
® r c
      « DUP SIZE
® m s
     
   « 1 s
            FOR p m
p DUP
              IF r
==         
              THEN
DROP2

             ELSE
GET
® l
« 1 s
  FOR q l q DUP
    IF c ==
    THEN DROP2

   ELSE GET
    END
  NEXT s 1
®LIST
»
               END
             NEXT s
1 -
®LIST
          
»
       » Det
       END * -1 i 1
+ ^

      IF 1 ³
       THEN +
       ELSE -
       END

   NEXT
  »
»