# Ecco (a livello "adulto") dei semplici esempi di FUNZIONI (a uno o più input/output, # ad output di vario tipo, anche non deterministico, anche grafico) descritte col linguaggio # del software R (ma si potrebbero usare altri linguaggi formali) # cs <- function(x) -x; cs(-1.5) # 1.5 a <- function(x,y) x+y; a(2,7) # 9 # (la "negazione" (+/−) e l'"addizione" sono tra le prime funzioni che si usano su una CT) a2 <- function(x) sum(x); a2( c(5,2,1,3) ) # 11 k <- function(x) sort(x); a <- c(5,2,1,3); k(a) # 1 2 3 5 a <- c("te","lo","dirò","domani"); k(a) # "dirò" "domani" "lo" "te" h <- function(p,t) round(p/t*100,2); h(3,7) # 42.86 M <- function(x) c(min(x),max(x)); M( c(5,2,1,3) ) # 1 5 E <- function(x,y) x & y; E(0,0); E(0,1); E(1,0); E(1,1) # FALSE # FALSE # FALSE # TRUE V <- function(x,y,z) (x & y) | (z & y); V(1,0,1); V(0,1,1) # FALSE # TRUE dadi <- function(n) {i <- 1:n; floor(runif(i)*6+1)} dadi(2); dadi(5); dadi(5) # 1 4 # 5 5 1 3 1 # 4 6 2 5 1 G <- function(f) {plot(f,-2,2); abline(h=0,v=0,col="red")} f <- function(x) x^2-1; G(f) # Nota 1: in "matematica" ci sono essenzialmente (oltre a connettivi e quantificatori) # questi tipi di entità: # le costanti, le funzioni, le relazioni e le variabili. Le variabili e le costanti # possono rappresentare oggetti matematici di vario tipo, le funzioni associano a # degli input presi tra oggetti matematici di qualche tipo degli output che sono # oggetti di qualche altro tipo (eventualmente lo stesso), le relazioni associano # a input tra oggetti matematici di qualche tipo un output scelto tra TRUE e FALSE # (o 1 e 0). Nel caso, particolare, dell'analisi matematica elementare una funzione # può essere rappresentata da una collezione di coppie di numeri reali tale che se # (a,b) e (a,c) stanno entrambe nella collezione allora b=c. Il "dominio" di una # funzione F è l'insieme di tutti gli input a cui F associa un output (questa è la # definizione standard data nei manuali di Calculus, dallo Spivak all'Apostol [*], # dopo un paragrafo di esempi in cui sono descritti esempi più generali di funzioni). # Il termine "funzione" impiegato in tutto il software matematico non è un uso # "informatico", ma è un uso "matematico". # Per altro il dominio di una funzione non è detto che lo si sappia individuare. Sia # F la funzione che ad x associa 1 se x è razionale e 0 altrimenti. Qual è il dominio # della funzione che ad x associa 1/(F(π+e)−x)? # [cerca su WolframAlpha Is pi + e a irrational number? ] # Per altro vi sono oggetti matematici per cui si può dimostrare che è "indecidibile" # se appartengano ad un certa collezione di oggetti o no. # Nota 2: runif (vedi l'esempio "dadi") in realtà è una funzione che ha un input # "nascosto", il "seme": se scelgo il seme posso determinare la sequenza. set.seed(57); runif(5) 0.24391435 0.51294954 0.03862843 0.16617658 0.73320525 set.seed(57); runif(3) 0.24391435 0.51294954 0.03862843 # Nota 3: Le operazioni sono solo particolari funzioni che hanno input e output dello # stesso tipo [la cosa dovrebbe essere ovvia, non solo per chi ha conoscenze di base # di logica matematica; vedi ad esempio il capitolo 2 del classico manuale di algebra # universale di Burris e Sankappanavar; nel corso di laurea in matematica, nei primi # corsi di analisi si studiano in dettaglio (e si rappresentano graficamente) le # funzioni ad 1 input ed 1 output, ma i paralleli corsi di algebra aprono subito la # vista su funzioni a più input e più output!]. # Nota 4: In qualche manuale universitario di analisi matematica italiano si trova # che una funzione è una regola che associa in modo univoco a un insieme di numeri # reali altri numeri reali. Questa definizione è sbagliata: se è una "regola" può # catturare solo una "parte" delle funzioni, e, poi, toglierebbe il senso ad ogni # applicazione del concetto, volta a modellizzare situazioni reali. Per un esempio si # pensi alle funzioni rappresentate graficamente qui sotto che associano ai vari mesi # dell'anno i millimetri di pioggia caduti durante essi, mediamente, tra il 1971 e # il 2000, nelle città di Palermo, Genova, Milano e Bolzano. Quali sono le "regole" # che li determinano?