sabato 28 gennaio 2017

Un'espressione ambigua - e allora? Provo a disambiguare


L'amico prof Gianluigi mi chiama alla lavagna, interrogato senza preavviso, davvero non me l'aspettavo dal mio prof preferito. Ma anche se non ero preparato (e poi si sa che sono lento a carburare, peggio di un diesel di quelli di una volta senza roba 'letronica dentro) me la sono cavata bene. Ho però promesso --sapete l'affanno, avevo anche il fiato corto e balbettavo un pochino-- un approfondimento scritto come si deve per come ne sono capace e allora ecco qui.

L'espressione 2÷6(1+2) è ambigua.
Manca un operatore tra 6 e la parentesi aperta. Per verificarlo basta aprire la calcolatrice, quella che si preferisce nel 'puter ed ecco


Ecco proprio come dicevo. Ho dovuto cambiare il simbolo della divisione da quello che si usa nella primaria a quello che uso io che --ahimè!-- l'ho finita da tempo; oltretutto i 'mericani (e non solo loro) usano un simbolo che non c'è sulla tastiera. In questi casi se conosco l'autore gli mando u messaggio, via mail, telefono, fax, messaggero a cavallo di un cammello (o, dipende dall'ambiente, a cammello di un cavallo), nel modo più opportuno insomma.
Ma in questo caso non è possibile e allora provo a ragionarci su. Per dire il doppio di x i matematici scrivono 2x, da intendersi due per x. E vale un po' in tutta la scuola, pensa a E = mc2. Mi viene allora da pensare che l'operatore mancante sia * (quello della per moltiplicazione anche se su carta si scrive normalmente x (per) che si confonderebbe però con x (ics)). Provo:


OK. A contarla fino in fondo io metterei degli spazi tra i vari elementi (ad eccezione dell'elevazione a potenza, che peraltro qui non c'è), così:


Non tutti la pensano in questo modo, nel post di Quora citato da GLF su questa questione trovate parecchie opinioni. Uh! 30 risposte! 😄
Ma si può anche sentire cosa ne pensano altri nerd, gente che la sa lunga --credo. Ecco i miei 3 usuali, Google, Wolfram Alpha e MathStudio:


Tutti d'accordo con me 😄

Però resto dell'idea di non accettare ambiguità.
Consideriamo cosa succede con un normale linguaggio di programmazione; inizio con il più semplice, Python:


OK, come previsto. Allo stesso modo si comportano in tanti --verifica lasciata come esercizio-- ma non tutti.

Il mio linguaggio preferito (anzi è una famiglia di linguaggi per via che quelli non si riescono mai a mettere d'accordo) usa la notazione prefissa invece dell'usuale infissa. Inoltre gli operatori sono funzioni (che nel gergo dei lispers si dovrebbero chiamare predicati). In questo modo si evitano ambiguità non solo sugli operatori ma anche sulle precedenze (non ci sono) al modesto prezzo di impiegare qualche parentesi 😊

Per cui ecco:


OK, lo ammetto all'inizio può sembrare un po' --come dire-- ma è semplice e logico, scompongo che si chiarisce tutto:


Chiaro vero? Ah! qui c'è tutto il Lisp: una form (una lista, il contenuto tra una coppia di parentesi) viene valutata in base al primo elemento della form (chiamato car per ragioni storiche ma adesso tanti consentono di usare anche first) che viene applicato agli elementi restanti (chiamato cdr per ragioni storiche ma adesso spesso anche rest) della form. Se un elemento è una form viene valutata valutata prendendo il valore che ritorna e continuando. Bello vero? 😇

Esiste un linguaggio spesso citato ma non così diffuso come ci si aspetterebbe: Smalltalk. Prima vediamo cosa succede e poi spiego:


È interessante vedere come si comporta con l'espressione originale, quella ambigua:


Uh! 😄 restituisce 2 valori; applicando l'operatore opportuno si giungerà al risultato finale.
C'è una ragione in tutto ciò: in Smalltalk tutto è un oggetto e quindi scrivendo 2 / 6 s'intende applica all'oggetto 2 l'operatore / sul dato 6.

Prof GLF come vado? Volendo potrei aggiungere Maxima e NumPy ma il discorso diventerebbe lungo. E credo già di essere parecchio fuori tema 😡
O no? 😊 🌺 🌷 🍇

Nessun commento:

Posta un commento