2.4.11       EUPHORIA

Il primo rilascio di Euphoria è per opera di Robert Craig nel 1993; successivamente è stato implementato da Rapid Deployment Software con l'aiuto di diversi utilizzatori. E' stato utilizzato per giochi in ambiente DOS, ma anche per programmi con interfacce grafiche per Windows e Linux X Windows. Euphoria è un linguaggio interprete non interattivo, con possibilità di generare programmi eseguibili in linguaggio macchina.

Gli oggetti di Euphoria sono atomi e sequenze. Gli atomi sono numeri singoli, le sequenze sono insiemi di atomi; una stringa di caratteri è una sequenza di valori numerici, ognuno dei quali è la codifica ASCII di un carattere. Atomi sono, ad esempio:

3.1415, 0, -1e7, 'B'      ('B' corrisponde al numero 65)

sequenze:

{5, {6}}, {{"joe", "slim"}, 52389, 97.25}, {}, "B"

Le sequenze sono delle matrici, ogni elemento, potendo essere sia atomo sia sequenza, rende possibile la creazione di matrici multidimensionali di strutture a "record", di stack, liste, alberi, ecc…

Gli operatori aritmetici e relazionali sono applicabili sia ad atomi sia a sequenze:

x = {5, 7 {1, 1}} + {10, 10, 20, 100} -- x diventa {15, 27, {101, 101}}

Esistono procedure e funzioni, queste possono restituire qualsiasi oggetto.

I tipi predefiniti sono: object, sequence, atom e integer; object può essere qualsiasi tipo, integer è ovviamente una dichiarazione per ottenere prestazioni migliori. I tipi definibili dall'utilizzatore sono di fatto delle funzioni che controllano la validità dell'oggetto tipizzato, il programma sottostante controlla se un numero è primo utilizzando una dichiarazione di tipo.

--Euphoria Programming Language version 2.3
constant VERO = 1
constant FALSO = 0
type primo(integer x)     
  for i = 2 to floor(sqrt(x)) + 1 do
    if remainder (x,i) = 0 then
      return FALSO
    end if
  end for  
  return VERO
end type

if primo(prompt_number("Immetti un numero intero ", {1, 9999})) then
  puts(1, "Numero primo")
else
  puts(1, "Non numero primo")
end if

Euphoria accetta anche funzioni ricorsive:

function fattor(integer n)
  if n = 0 then
    return 1
  else
    return n * fattor(n -1)
  end if
end function

Sono disponibili oltre dieci librerie "ufficiali" per estendere le funzioni native, fra di esse la gestione di un semplice, ma efficace Data Base, operazioni su stringhe, per la multimedialità e la gestione delle interfacce grafiche.

Euphoria è un linguaggio strutturato, ha una certa ambiguità data dall'accettare, nella dichiarazione di funzione, nomi di variabili coincidenti con nomi di funzioni (non tutti), "disabilitandone" il corretto funzionamento (length). Manca una gestione degli errori. Il linguaggio è facile da utilizzare ed è robusto grazie ai controlli di validità degli indici, delle variabili non utilizzate o non dichiarate; tuttavia cede alla tentazione di permettere istruzioni criptiche del tipo variabile op= operando per scrivere x *= 10 invece di x = x * 10.