Manuale di Gretl: Gnu Regression, Econometrics and Time-series Library | ||
---|---|---|
Indietro | Capitolo 11. Funzioni definite dall'utente | Avanti |
Occorre definire una funzione prima di poterla utilizzare. La sintassi per farlo è la seguente:
function nome-funzione parametri corpo della funzione end function
Il nome-funzione identifica la funzione in modo univoco: deve iniziare con una lettera, può essere lungo al massimo 31 caratteri (eventuali caratteri in più verranno troncati) e non può contenere spazi. Se si tenta di definire una funzione con lo stesso nome di un comando di gretl o di una funzione preesistente, si otterrà un'errore. Nel secondo caso, per evitare un errore (ossia per poter ridefinire una funzione utente), basta far precedere la definizione della funzione da:
function nome-funzioneclear
I parametri di una funzione (se esistono) vanno indicati sotto forma di lista separata da virgole. I parametri possono essere di tre tipi: variabili ordinarie (serie di dati), variabili scalari, o liste di variabili. Ogni elemento della lista di parametri è composto da due termini: per prima cosa un indicatore di tipo (series, scalar o list), quindi il nome con cui il parametro verrà riconosciuto all'interno della funzione. Ecco un esempio (le parentesi che racchiudono la lista dei parametri sono opzionali):
function funzione (series y, list xvars, scalar verbose)
Quando una funzione viene chiamata, i parametri vengono istanziati usando gli argomenti indicati nella chiamata della funzione. Vengono fatti dei controlli automatici per assicurarsi che il numero degli argomenti contenuti in una chiamata di funzione corrisponda al numero di parametri, e che i tipi degli argomenti corrispondano ai tipi specificati nella definizione della funzione; se qualcuna di queste condizioni è violata, viene segnalato un errore. Una serie può essere indicata come argomento specificando il nome della variabile in questione, oppure il suo numero identificativo. Gli scalari possono essere indicati specificando il nome di una variabile o un valore numerico (non è possibile indicare il numero identificativo della variabile). Le liste devono essere indicate per nome.
Il corpo della funzione è composto da comandi gretl o funzioni definite dall'utente (ossia, le funzioni possono essere nidificate). Una funzione può persino chiamare sé stessa (ossia, le funzioni possono essere ricorsive), fino a un massimo di 8 "livelli di ricorsività", ma questo valore è provvisorio, potrà essere aumentato se sembra troppo restrittivo. Se il corpo della funzione può contenere chiamate ad altre funzioni non può però contenere definizioni di altre funzioni, ossia non è possibile definire una funzione all'interno di un'altra funzione.
Le funzioni possono essere chiamate, ma non definite, all'interno di un loop (si veda il Capitolo 10).