Professional Documents
Culture Documents
In Questo Corso
Perch insegnare progr. Funzionale e Logica nella scuola secondaria? Su quali concetti puntare l'attenzione? Quali strumenti utilizzare? Risponderemo insieme (parzialmente) alle domande Non un corso di programmazione...
Riferimenti Bibliografici
(corsi di progr. Funzionale e Logica)
Funzionale e Logica: Insiemi Funzionale: Funzioni, Composizione di Funzioni Logica: Relazioni, Formule Logiche
Strumenti:
Concetto di Insieme: raccolta di elementi (Scuole Elementari) Esempi di insiemi finiti Esempi di insiemi numerici
Una funzione una legge che associa ad ogni elemento del dominio uno ed un solo elemento del codominio (Scuole Superiori) Non sempre questo concetto chiaro!
Cosa ne scaturisce?
es. Prof. Se f(y)=2*y+3, quanto vale f(8)? Studente Domanda trabocchetto! La x non c'!
Si pu esprimere la temperatura in funzione del giorno oppure si pu esprimere il giorno in funzione della temperatura? Si pu esprimere l'altezza di una persona in funzione della sua et oppure...? Esistono due concetti A e B tali che posso esprimere A in funzione di B e B in funzione di A?
alcuni esercizi erano formulati male: - temperatura media giornaliera; - altezza misurata nel giorno del compleanno; - ... gli studenti sono in grado di correggere la formulazione in una corretta? fornendo agli studenti una formulazione corretta questi sono in grado di comprendere gli esercizi?
Molto tempo da quando si vedono gli insiemi a quando si vedono le funzioni Gli insiemi sembrano giocattoli, mentre le funzioni sembrano complicate Si passa subito a fare esercizi sulle funzioni reali f: Il concetto di relazione non viene introdotto ma gli studenti spesso confondono relazioni e funzioni
f(x,y) = x + y una funzione binaria su 2 o una funzione unaria su ? Che ariet hanno somma, prodotto, ? Le funzioni hanno sempre ariet 1 su un opportuno dominio
Composizione di Funzioni
Data f : A B e g : B C considerare f g : A C Dire se una funzione composizione di altre dipende fortemente dalle funzioni base es. f(x) = (x + 5) non composta g(x) = (x + 2) + 3 composta, ma f=g??? un concetto fondamentale (es. derivate)
Dal punto di vista Matematico - capire generalit e potenza delle funzioni - capire differenza tra funzione e relazione - capire concetti di dominio e codominio Dal punto di vista Informatico - programma sequenza di passi - legami tra matematica e informatica
un ambiente di programmazione grafico, interattivo ed integrato ideato per l'insegnamento di Scheme disponibile per Windows, Mac OSX, Unix distribuito con la licenza GNU Lesser General Public Licence (LGPL)
Riferimenti Bibliografici
Scheme
http://www.schemers.org/Documents/Standards/R5RS/
Dr Scheme
http://www.drscheme.org (download) http://www.htdp.org/2002-09-22 (libro on-line) Halperin et al. Concrete Abstractions. PWS
Dr Scheme
Scegliere Beginning Student!
Finestra Definizioni
Execute rende le definizioni utilizzabili nella...
Finestra Interazione
Pu essere usata anche senza aver definito funzioni
Le Prime Prove
si pu iniziare usando la finestra di interazione si valutano semplici espressioni numeriche le stringhe vanno scritte tra virgolette si usa; per i commenti le operazioni sono prefisse attenti alle parentesi!!
Funzionalit di DrScheme
Save serve per salvare le definizioni... Check Syntax controlla che sia scritto bene Execute rende disponibili le definizioni Step per vedere l'esecuzione per passi Break ... se proprio va male per fermare tutto...
Funzioni Predefinite - 1
le funzioni aritmetiche + - * / sono funzioni predefinite in Scheme ovvero non occorre definirle una funzione predefinita fornisce il resto della divisione intera cosa accade se chiedo (remainder 4 3.1)? perch? (concetto di dominio)
remainder
Funzioni Predefinite - 2
false
Funzioni Predefinite - 3
una funzione unaria prende in input un valore booleano l'output deve essere definito per true e per false > (if #t 5 ciao) ritorna valore 5 > (if #f 5 ciao) ritorna valore ciao
if
molto utile per costruire funzioni composte: il valore in input non una costante, ma una funzione che deve essere valutata l'output pu essere definito usando altre funzioni
if
La funzione define
La funzione associa un nome simbolico ad un espressione . Es.
(define )
Qualche esempio
(define pippo (+ (* 3 5) 8)) define non serve solo per definire funzioni
Scheme e Lambda?!?
(define (somma x y) (+ x y))
oppure
(define somma (lambda (x y) (+ x y))) Probabilmente non sar necessario introdurre la lambda notazione, ma se avete spiegato la funzione define... Anche relativamente alle potenzialit di DrScheme dovrete effettuare delle scelte...
Comporre Funzioni - 1
(define (id x) x) (define (doppio x) (+ (id x) (id x))) (define (triplo x) (+ (id x) (doppio x))) doppio composizione di id e + triplo composizione di id, doppio e + come scrivere triplo senza comporre funzioni? il concetto di composizione dipende da: 1. quali sono le funzioni predefinite; 2. come definisco una funzione.
Comporre Funzioni - 2
La funzione + non definita sulle stringhe Quando si compongono funzioni occorre fare attenzione a domini e codomini!!
La Funzione If - 1
(define (grande x y) (if (> x y) "si" "no")) > (grande 8 5) > si > (grande 3 3) > no
in questo caso viene valutato l'input si valuta se la funzione (> x y) vale #t o #f non servono valutazioni per l'output grande composizione di if e >
La Funzione If - 2
(define(pari>= x)(if (even? x) x (+ x 1))) > (pari>= 5) > 6 > (pari>= 6) > 6
Occorre valutare sull'input (even? x) Per ottenere l'output quando x dispari si valuta (+ x 1) Servono molti esercizi con composizioni ed if...
Composizioni di If
Il prezzo del biglietto per il cinema :
5 euro per adulti; 3 euro bambini; 4 euro pensionati.
Funzioni Predefinite - 4
una funzione binaria prende in input due valori booleani restituisce un valore booleano restituisce true solo se gli input sono true true
and or
...
not
...
Le funzioni and, or, not hanno tutte input booleani ed output booleani... ... quindi facendo attenzione alle ariet possibile comporle La funzione if ha input booleani ed output non necessariamente booleani... ...le composizioni con if esterno funzionano Ci sono casi con l'if interno ad and, or, not??
Possibili Esercizi
Calcolo di perimetri, aree, volumi... Problemi distanza-velocita' Problemi di capitalizzazione Problemi di conversioni di misure Utilizzo della libreria draw.ss (Teachpack) http://www.htdp.org/2002-09-22
Ricorsione - 1
consideriamo f :
so quanto vale f(0) se n>0 per calcolare f(n) mi serve f(m) con per un qualche m<n
un caso particolare di funzione ricorsiva gi abbastanza complesso da capire quasi quanto basta in generale (vedere corso di fondamenti)
Ricorsione - 2
-1)
oppure
Ricorsione - 3
(define (fact3 n) (if (< n 0) -1 (if (= n 0) 1 (* n (fact3 (- n 1)))))) (define (dfact2 n) (if (< (fact3 n) 0) errore (fact3 n)))
..
Esempi ed Esercizi
divisione intera
(define (diviso n m) (if (< n m) 0 (+ (diviso (- n m) m) 1)))
4.7 3)
4.7 3)
Esempi ed Esercizi
sommare tutti i numeri naturali appartenenti ad un intervallo; contare le cifre di un numero; il problema di Giuseppe;... decidere se un numero primo
(define (qprimo n m) (if (= m 1) #t (if (= (remainder n m) 0) #f (qprimo n (- m 1))))) (define (numprimo n)(qprimo n (- n 1)))
come migliorarlo?
Esempi ed Esercizi
come migliorarlo?
(define (fastmcd n m) (if (> n m) (if (= (remainder n m) 0 ) m (fastmcd (remainder n m) m)) (fastmcd m n)))
cosa manca?
Le Liste
lista = elenco di elementi in un dato ordine [] la lista vuota; [3] la lista con 3 come unico elemento; [4, 7] la lista con primo elemento 4 e...; [4, 7] diversa da [7, 4]; [a, 2, 5] una lista in cui ... Scheme fornisce delle funzioni predefinite per lavorare con le liste: cons, car, cdr, null? Scheme fornisce anche la funzione list, ma list non ha un'ariet... un po' pericolosa...
cons una funzione binaria prende in input un elemento el ed una lista l restituisce in output la lista [el,l] sono funzioni unarie
restituisce in output el
restituisce in output l
null? che prende in input una lista l e restituisce in output #t solo se l la lista vuota
trovare il terzo elemento di una lista ricercare un elemento in una lista calcolare la lunghezza di una lista dire se due liste sono uguali (si pu usare la funzione predefinita equal?) sommare gli elementi di una lista trovare il massimo di una lista ... altre funzioni in cui l'output non sia una lista
Esempi di calcolo
> (define pippo (list 1 2 3)) > (sommalista pippo) > 6
dato n, scrivere una lista con n elementi dato n, scrivere la lista [n,n-1,...,0] dati x y z w, scrivere la lista [x, y, z, w] dati x y z w, scrivere la lista [y, x, w, z] ... altri aventi le liste in output, ma non in input
Esempi
aggiungere el in posizione i di una lista l eliminare el dalla posizione i di una lista l aggiungere el in fondo alla lista l
(define (inseriscicoda x l) (if (null? l)(cons x l) (cons (car l)(inseriscicoda x (cdr l)))))
mettere insieme due liste (esiste la funzione predefinita append) invertire una lista ed ordinare una lista
(define (inseriscicoda x l) (if (null? l)(cons x l) (cons (car l)(inseriscicoda x (cdr l)))))
Composizione e Liste
dato n, produrre la lista [0,1,..., n] una volta svolti gli esercizi precedenti diventa una semplice composizione di funzioni produco la lista [n,...,1,0] e la inverto oppure uso l'inserimento in coda
Abbiamo Tralasciato
lambda notazione funzioni higher-order significato dell'apice ' (questo semplice) l'uso del let (anche questo semplice) vi viene in mente qualcos'altro?
Abbiamo Trascurato
Scheme un linguaggio non tipato Risulta pi immediato programmare :-) La nozione di dominio sfumata
:-(
le funzioni predefinite sono tipate le funzioni definite dall'utente possono essere usate in modo improprio
Un'alternativa Tipata
ML linguaggio funzionale fortemente tipato SML/NJ (Standard ML of New Jersey) free http://www.smlnj.org//index.html2 per Windows, Unix, Linux In questo indirizzo trovate anche testi, tutorial, ed esempi (benchmarks) Se riuscite a compilare un programma, allora al 99% anche semanticamente corretto!!
Gli Svantaggi di ML
All'inizio pu essere molto frustrante scrivere un programma che venga compilato senza errori L'interfaccia a dir poco spartana