Archivi Categorie: Falcon

Falcon Programming Language

fpl

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

L’argomento trattato lo conoscono tutti quelli che si occupano (o si sono occupati) di questioni ingegneresche o ambientali o –insomma dei documenti in cui i numeri degli importi per lavori non possano essere facilmente alterabili. Certo, l’ho fatto anch’io, nell’altro millenio. Ma quello che mi ha incuriosito è Falcon, tanto che ci ho dato una sbirciatina, alla sera, anzi a bedtime come dicono i ‘mericanini.

Proprio adesso Falcon ha raggiunto il traguardo della versione 1.0, quindi è a posto, non si tollerano più errori, nèh!

Allora, trovate tutto qui: The Falcon Programming Language

Falcon is an Open Source, simple, fast and powerful programming language, easy to learn and to feel comfortable with, and a scripting engine ready to empower mission-critical multithreaded applications.

Falcon provides six integrated programming paradigms: procedural, object oriented, prototype oriented, functional, tabular and message oriented. And you don’t have to master all of them; you just need to pick the ingredients you prefer, and let the code follow your inspiration.

Poco per volta mi sono letto tutto The Survival Guide (130 pagine dense di esempi su tutto).

Ci sono ancora alcune cose da rivedere ma è OK, anzi come primo approccio al linguaggio è anche troppo dettagliato, con parti teoriche che ne appesantiscono la lettura (almeno per chi, come me, lo legge come favola della buona notte). Però bello che ci trovi idee prese dalle fonti più disparate: Python, Lisp, C/C++, Lua, …

1050-Giancarlo

Insomma da vedere. Anche perché johnnymind, Giancarlo Niccolai è uno tosto, imho. Anzi non solo secondo me: Giancarlo Niccolai: Geek of the Week.

È inoltre molto attivo su Twitter, lo trovate come johnnymind.

Allora, partite da Falcon Wiki – New Engine:Rules e buona avventura 😀

Però una domanda, a Robitex e a tutti: ci sono già parecchi linguaggi di scripting, a me vengono in mente Python (quello che propongo io di solito, e adesso anche il prof. Lipari), Ruby, Lua, Java, Perl (quest’ultimo meno usato ultimamente) e tanti altri ancora, per esempio su Windows ci sono C#, VisualBasic, Delphi (questo in realtà non fa parte della categoria, forse), riuscirà a emergere Falcon? Certo lo meriterebbe! 😀

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.