Un linguaggio “Twitter”
Mettendo in secondo piano, per ora, le caratteristiche peculiari del linguaggio, la prima cosa che colpisce di Wolfram Language è il rapporto fra codice utile e codice di impalcatura, che può anche essere infinito, nel senso che il secondo è zero.
Qualunque frammento è eseguibile direttamente senza richiedere codice, inclusione di librerie o altre infrastrutture sintattiche.
Si possono concatenare gli operatori sui dati iniziali, si può usare uno stile di programmazione funzionale, passando i risultati di una funzione alla successiva e non c’è la distinzione stretta di altri linguaggi fra codice, dati e output dell’elaborazione.
In aggiunta a questo, il linguaggio abbonda di costrutti di alto livello, infine il motore online di Wolfram Alpha può offrire l’accesso a fonti dati che vanno dalle condizioni meteo, all’andamento di borsa.
Tutto questo collabora a ottenere in uno stile di programmazione sintetico al massimo, tanto che frammenti di programma di una o due righe, a misura di tweet, producono risultati sorprendentemente complessi.
Facciamo qualche esempio. Ecco cosa serve per disegnare una cartina geografica, che contiene due città americane e ne mette in evidenza il contorno:
[symple_box color="yellow" text_align="left" width="100%" float="none"]
GeoListPlot[{
Entity["City", {"NewYork", "NewYork", "UnitedStates"}],
Entity["City", {"Boston", "Massachusetts", "UnitedStates"}]
}]
[/symple_box]
Questo esempio è ancora più interessante: l’output è una cartina mondiale in cui sono contornate e evidenziate in rosso le nazioni che hanno partecipato alla guerra di Corea:
[symple_box color="yellow" text_align="left" width="100%" float="none"]
GeoListPlot[{DeleteCases[
EntityValue[Entity ["HistoricalEvent", "KoreanWarBegins"], "CountriesInvolved"], Entity["HistoricalCountry", __]]},
GeoBackground -> "ReliefMap" ]
[/symple_box]
Possiamo usare dati geoeconomici, ad esempio, per realizzare un grafico del prodotto interno lordo rispetto alla popolazione. Nel codice richiediamo entrambe le scale logaritmiche e un tooltip con il nome della nazione in ogni punto.
[symple_box color="yellow" text_align="left" width="100%" float="none"]
ListLogLogPlot[
Tooltip[{CountryData[#, "Population"], CountryData[#,"GDP"]}, CountryData[#, "Name"]] & /@ CountryData["Countries"]]
[/symple_box]
Una tabella dei primi duecento numeri interi, in cui i numeri primi sono evidenziati con un rettangolo
[symple_box color="yellow" text_align="left" width="100%" float="none"]
Table[If[PrimeQ[n], Framed[n], n],{n, 20}]
[/symple_box]
La ricerca e l’evidenziazione con un cerchio rosso delle celle non sovrapposte ad altre in un’immagine microscopica rappresentata dalla variabile i
[symple_box color="yellow" text_align="left" width="100%" float="none"]
cells = SelectComponents[DeleteBorderComponents [Binarize[i, {0, .7}]], {"Area", "Holes"}, 100 < #1 < 1000 && #2 > 0 &];
circles =
ComponentMeasurements[ImageMultiply[i,cells], {"Centroid", "EquivalentDiskRadius"}][[ All, 2]];
Show[i, Graphics[{Red, Thick, Circle @@ # & /@ circles}]]
[/symple_box]
È chiaro che con esempi di questo genere la discussione sulla sintassi, le strutture dati e le strutture di controllo diventa secondaria per dare la cifra del linguaggio. Notiamo però che tutti gli esempi che abbiamo mostrato implicano un trattamento automatico delle liste di dati, senza bisogno di esplicitare cicli.
Notiamo en passant che l’operatore /@ indica di mappare un’operazione su un set di elementi.
In ogni caso, non manca il consueto corredo di Do, For, While, If, Switch e le solite cose.
Il linguaggio ha una sintassi ampia, anche perché non abbiamo trovato traccia di strumenti per la segmentazione o la creazione di librerie, in compenso è facile creare funzioni e esportarle nel cloud.
Insomma, c’è parecchio da masticare, ma per fortuna la documentazione online è chiara e estensiva.
>Continua a leggere: il linguaggio Wolfram