Numeri in lettere in Falcon

Di nuovo?

Certo perché per me tradurre in lettere un numero è ormai diventato il mio personale “Hello World!”. L’ho applicato in articoli sul blog personale nei linguaggi Go, Python, e Java e Lua. Questa è la volta di Falcon, un linguaggio di scripting molto interessante.
L’ho scoperto per caso quando, lavorando alla guida tematica alla riga di comando, ho voluto visitare la pagina di wikipedia sui linguaggi di scripting. Nell’elenco compariva anche la misteriosa voce ‘Falcon’…

Il logo di Falcon

Il logo di Falcon

L’Autore principale è l’italiano Giancarlo Niccolai che ha dedicato il nome della sua creatura informatica proprio a Giovanni Falcone, un riconoscimento che gli avrebbe senz’altro fatto piacere…

Ecco il codice della funzione ricorsiva che trasforma un numero nella sua rappresentazione in lettere. La prima cosa che potete notare è che possiamo utilizzare la funzione num2text() prima che sia definita nel listato stampandone l’output a video con il supercompatto operatore > che concatena tutti gli argomenti che lo seguono.
Nel listato si possono trovare cose interessanti appunto, come la disponibilità dell’operatore ternario usato alla riga 11, e del costrutto switch che da solo costituisce il corpo della funzione ricorsiva.
Il linguaggio nasce per l’utilizzo in ambiente reale, è quindi compatto chiaro e semplice e lo si può vedere anche dalla forma del condizionale quando l’istruzione da eseguire è una sola (vedi alle righe 30 e 37).

/*
   script di traduzione di numeri in lettere
*/

> "15236 => ", num2text(15236)
> "348 => "  , num2text(  348)
> "897 => "  , num2text(  897)

// wrapper function
function num2text(v)
    return (v == 0) ? "zero": numToText(v)
end

// ricursive function
function numToText(n)
    switch n
		case 0
			return ""
		case 1 to 19
			return ["uno", "due", "tre", "quattro", "cinque",
					"sei", "sette", "otto", "nove", "dieci",
					"undici", "dodici", "tredici",
					"quattordici", "quindici", "sedici",
					"diciasette", "diciotto", "diciannove"][n-1]
		case 20 to 99
			letter = ["venti", "trenta", "quaranta",
					  "cinquanta", "sessanta",
                      "settanta", "ottanta", "novanta"][floor(n/10)-2]
			t = n % 10
			if t == 1 or t == 8: letter = letter[0:-1]
			return letter + numToText(n % 10)
		case 100 to 199
			return "cento" + numToText(n % 100)
		case 200 to 999
			m = floor(n % 100)
			letter = "cent"
			if m != 8: letter = letter + "o"
			return numToText(floor(n/100)) +
               letter +
               numToText(n % 100)
        case 1000 to 1999
            return "mille" + numToText(n% 1000)
        case 2000 to 999999
            return numToText(floor(n/1000)) +
                   "mila" +
                   numToText(n % 1000)
        case 1000000 to 1999999
	        return "unmilione" + numToText(n % 1000000)
        case 2000000 to 999999999
            return numToText(floor(n/1000000)) +
                   "milioni" +
                   numToText(n % 1000000)
        case 1000000000 to 1999999999
            return "unmiliardo" + numToText(n % 1000000000)
        default
			return numToText(floor(n/1000000000)) +
                    "miliardi" +
                    numToText(n % 1000000000)
	end
end

Un buon primo contatto

Sono stato attirato da Falcon per un paio di motivi: la programmazione ad oggetti tabellare e la disponibilità dei template, ma ci sono tante altre cose interessanti, non ultimo la compilazione del codice in file binari per la macchina virtuale, e tutte le caratteristiche che ancora non conosco 🙂

Alla prossima e…volate alto.
R.

Annunci
Post a comment or leave a trackback: Trackback URL.

Commenti

  • juhan  On 12 gennaio 2013 at 19:54

    Bello 😀
    Io con un linguaggio la tiro lunga per un semestre, tu risolvi tutto in un post 🙂
    OK, lancio una petizione: ancora. E poi c’è sempre Lua in sospeso (non solo con te, ma il possibile autore è finito dall’altra parte del mondo, dove Lua significa Luna).
    Una domanda ancora (posso vero?): quali sono i linguaggi di scripting che conviene conoscere? C’è anche Perl?

    • robitex  On 14 gennaio 2013 at 09:32

      Per rispondere alla tua domanda, potremo fare una specie di intervista insieme e creare un post su quello che pensiamo sui linguaggi di scripting…
      Per Lua, vorresti che apparisse su queste pagine un’introduzione? 🙂
      R.

      • juhan  On 14 gennaio 2013 at 10:19

        Potrebbe essere un’idea. Lua e Ruby sono (per quel che ne so) usati in alternativa a Python, che è un po’ il nuovo Basic. Ma sono ormai fuori dal giro e frequento pochissime persone. Mi sa che ne riparleremo, se ti va 🙂

Trackbacks

  • By Falcon Programming Language « Ok, panico on 8 febbraio 2013 at 09:58

    […] Recentemente Robitex ci ha fatto vedere un esempio di un nuovo linguaggio di programmazione, qui: Numeri in lettere in Falcon. […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: