faz: uma linguagem funcional didática -...

41
Faz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio Mauro Duarte Orientador Prof. Dr. Rodrigo Machado Co-orientador Universidade Federal do Rio Grande do Sul Instituto de Informática

Upload: truonghanh

Post on 09-Feb-2019

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

Faz: uma linguagem funcional didática

Vítor Bujés Ubatuba De Araújo

Prof. Dr. Lucio Mauro DuarteOrientador

Prof. Dr. Rodrigo MachadoCo-orientador

Universidade Federal do Rio Grande do SulInstituto de Informática

Page 2: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

2/41

Motivação Linguagens funcionais

Diversas aplicações na academia e na indústria Extensão da álgebra elementar

Composição e aplicação de funções Interessante no ensino de programação

Page 3: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

3/41

Motivação Racket

How to Design Programs (HtDP) Ambiente DrRacket Linguagens didáticas

Problemas recorrentes Sintaxe Tipagem dinâmica

Page 4: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

4/41

Proposta Faz: nova linguagem

Semântica similar à de Racket

Sintaxe mais familiar Notação matemática, outras linguagens Palavras-chave em português

Tipagem semi-estática Declaração formal dos tipos Uniões de tipos

Integrada ao ambiente DrRacket

Page 5: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

5/41

HtDP – hierarquia de linguagens Beginning Student

Funções não podem ser argumentos Operadores como + exigem pelo menos dois argumentos Sem variáveis locais ...

Beginning Student with List Abbreviations Introduz sintaxe abreviada para listas

Intermediate Student Introduz funções como argumentos, variáves locais

Intermediate Student with Lambda Introduz funções anônimas

Advanced Student Introduz variáveis/estruturas mutáveis

subconjuntospuramentefuncionais

Page 6: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

6/41

Sintaxe

Page 7: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

7/41

Sintaxe – tipos básicos Números

HtDP

42, -1355/113, -1/23.1415921+2i, 0+355/113i

(/ 1 2) => 0.5 (ou 1/2)(sqrt 2) => #i1.4142135

Faz

42, -1355/113, -1/23.1415921+2i, 355i/113

1/2 => 0.5raiz(2) => 1.4142135

Distinção sintática entre números exatos e inexatos Eliminada em Faz

Page 8: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

8/41

Sintaxe – tipos básicos Strings, caracteres

HtDP

"hello", "\n"#\h, #\Newline

Faz

"hello", "\n"'h', '\n'

Sintaxe mais consistente Similar a C, C++, Java

Page 9: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

9/41

Sintaxe – tipos básicos Booleanos

HtDP

truefalse

Faz

verdadeirofalso

Nomes em português

Page 10: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

10/41

Sintaxe – tipos básicos Strings e símbolos

HtDP

"hello world"'helloworld

Faz

"hello world"

Tipo "símbolos" é redundante no ensino Representação interna Substituídos por strings e enumerações em Faz

Page 11: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

11/41

Sintaxe – expressões aritméticasHtDP

(+ 2 3)(+ (* 2 3) (* 4 5))(* (+ 2 3) (+ 4 5))

(+ (* a (expt x 2)) (* b x) c)

Faz

2+32*3 + 4*5(2+3) * (4+5)

a*x^2 + b*x + c

Operadores infixados Evitam aninhamento excessivo Regras de precedência da álgebra Evitou-se introduzir operadores não familiares

resto(10,3) não 10%3

Page 12: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

12/41

Sintaxe – expressões lógicasHtDP

(= 2 3)(string=? "foo" "bar")(symbol=? 'a 'b)(char=? #\a #\b)

(< x y)(and (> x 2) (< x 5))(or (string=? x "foo") (string=? x "bar"))(not (= x 3))

Faz

2 == 3"foo" == "bar""a" == "b"'a' == 'b'

x < yx>2 e x<5x=="foo" ou x=="bar"

x != 3não x==3

HtDP: operadores distintos para cada tipo Útil para adicionar typechecks em execução Análise estática em Faz supre essa necessidade

Page 13: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

13/41

Sintaxe – variáveisHtDP

(define x 42)

Faz

seja x = 42seja x Números = 42∈

Comando seja Declarações de tipos: conjuntos

Page 14: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

14/41

Sintaxe – funções; soma: número número -> número(define (soma x y) (+ x y))

(soma 2 3)

Declarações de tipos Posição dos parênteses em HtDP

Diverge da notação matemática Inconsistente com definição de estrutura(define (f x y) …)(define-struct f (x y))

define (não define-function) vs. define-struct

HtDP

Faz função soma(x ∈ Números, y ∈ Números) -> Números devolve x+y

soma(2, 3)

Page 15: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

15/41

Sintaxe – condicionaisHtDP

(define (sinal x) (cond [(< x 0) 'negativo] [(= x 0) 'neutro] [else 'positivo]))

Faz

função sinal(x Números) -> Strings∈ se x<0 devolve "negativo" se x==0 devolve "neutro" senão devolve "positivo"

Separador explícito entre teste e resultado Comando explícito de retorno Testes em série em ambas as linguagens

senão obrigatório em Faz (condicional produz valor) Serve como delimitador

Page 16: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

16/41

Sintaxe – estruturas de dadosHtDP

(define-struct pessoa (nome idade))

Faz

tipo Pessoas = { pessoa(nome Strings, idade Números) }∈ ∈

HtDP

(define p (make-pessoa "Helga" 18))

(pessoa-nome p)(pessoa-idade p)

(pessoa? p)(pessoa? 5)

Faz

seja p = pessoa("Helga", 18)

nome de pidade de p

p Pessoas∈5 Pessoas∈

Page 17: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

17/41

Sintaxe – enumeraçõesFaz

tipo Cores = { vermelho, verde, azul }

Suprem principal caso de uso de símbolos De maneira estruturada Auxilia detecção de erros

tipo Árvores = { vazia, nó(valor Números, esq Árvores, dir Árvores) }∈ ∈ ∈

Page 18: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

18/41

Sintaxe – tipos mistosHtDP

(define-struct retângulo (lado altura))(define-struct círculo (raio))

;; Uma forma é:;; - um retângulo; ou;; - um círculo.

Faz

tipo Retângulos = { retângulo(lado Números, altura Números) }∈ ∈tipo Círculos = { círculo(raio Números) }∈

tipo Formas = Retângulos U Círculos

Page 19: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

19/41

Sintaxe – tipos mistosHtDP

;; área: forma -> número;; Retorna a área de uma forma.(define (área f) (cond [(retângulo? f) (* (retângulo-lado f) (retângulo-altura f))] [(círculo? f) (* PI (expt (círculo-raio f) 2))] [else (error "Forma desconhecida")]))

Faz

função área(f Formas) -> Números∈ # Retorna a área de uma forma. se f Retângulos∈ devolve lado de f * altura de f se f Círculos∈ devolve pi * (raio de f)^2 senão erro "Forma desconhecida"

Page 20: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

20/41

Sintaxe – listas encadeadasHtDP

(define lista1 (cons 1 (cons 2 (cons 3 empty))))

(first lista)(rest lista)

(empty? lista)(empty? empty)

(cons? lista)(cons? empty)

(list? lista)(list? empty)(list? 42)

(define lista2 (list 1 2 3))

Faz

seja lista = elo(1, elo(2, elo(3, vazio)))

primeiro de listaresto de lista

lista == vaziovazio == vazio

lista != vaziovazio != vazio

lista Listas de Números∈vazio Listas de Números∈42 Listas de Números∈

seja lista2 = [1,2,3]

Consistência com tipos definidos pelo usuário

Page 21: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

21/41

Sintaxe – definições locaisHtDP

(define z 42)

(define (foo) (local ( (define x 1) (define y 2) ) (+ x y)))

Faz

seja z = 42

função foo() -> Números seja x = 1 seja y = 2 devolve x+y

HtDP Forma especial para declarações locais Excesso de parênteses, aninhamento Conceito introduzido no final da disciplina

Faz Organizada em blocos Definição local = global (bloco define escopo)

Page 22: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

22/41

Sintaxe – definições locaisHtDP(define (bhaskara a b c) (local ((define delta (- (* b b) (* 4 a c)))) (cond [(< delta 0) empty] [else (local ((define x1 (/ (- (- b) (sqrt delta)) (* 2 a))) (define x2 (/ (+ (- b) (sqrt delta)) (* 2 a)))) (cond [(= delta 0) (list x1)] [else (list x1 x2)]))]))

Fazfunção bhaskara(a Números, b Números, c Números) -> Números∈ ∈ ∈ seja delta = b^2 - 4*a*c se delta < 0 devolve [] senão seja x1 = (-b - raiz(delta)) / (2*a) seja x2 = (-b + raiz(delta)) / (2*a) se delta == 0 devolve [x1] senão devolve [x1, x2]

Page 23: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

23/41

Sintaxe – comandos e blocos Faz introduz distinção entre expressões e comandos

Similar a linguagens imperativas Diferente de outras linguagens funcionais

Blocos definem escopo Comandos servem como delimitadores implícitos

Faz é uma linguagem funcional Todo bloco produz um valor bloco ::= { declarações }* comando-final

teste expr

Page 24: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

24/41

Sistema de tipos HtDP: tipagem dinâmica

Dificulta detecção de erros

Page 25: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

25/41

Sistema de tiposHtDP

(define (dobro x) (* 2 x))

(define (f x y) (+ (dobro x) (dobro y)))

(f 1 'a)

(f 1 'a)= (+ (dobro 1) (dobro 'a))= (+ (* 2 1) (* 2 'a))= *: expects a number as 2nd argument, given 'a

Faz

função dobro(x Números) -> Números∈ devolve 2*x

função f(x Números, y Números) -> Números∈ ∈ devolve dobro(x) + dobro(y)

f(1, "a")

Page 26: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

26/41

Sistema de tipos HtDP: tipagem dinâmica

Dificulta detecção de erros Tipos documentados por comentários Mas é flexível

Listas de quaisquer valores Tipos mistos

Faz Tipagem semi-estática Flexibilidade similar a HtDP

Tipos paramétricos (Listas de ?X) Uniões de tipos

Page 27: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

27/41

Sistema de tipos Tipos básicos

Números Strings Caracteres Booleanos

Tipos especiais Tudo Nada

Tipos funcionais Funções (Números, Números) -> String

Page 28: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

28/41

Sistema de tipos

tipo Listas de ?X = { vazio, elo(primeiro ?X, resto Listas de ?X) }∈ ∈

vazio Listas de Nada∈elo Funções (?X, Listas de ?X) -> Listas de ?X∈

elo(1, [2,3])

Tipos definidos pelo usuárioPessoas, Cores

Tipos paramétricos

Page 29: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

29/41

Sistema de tipos Uniões de tiposNúmeros U Strings

Operações válidas sobre um valor do tipo S U T Abordagem segura vs. flexível

função f(x Números U Strings) -> Números U Strings∈ se x Números∈ devolve x + x se x Strings∈ devolve concatena_strings(x, x) senão erro "Tipo inválido"

f(5) + 1

Page 30: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

30/41

Sistema de tipos – uniões vs. polimorfismo Uniões introduzem subtipagemNúmeros ⊆ Números U Strings

Quaisquer tipos S e T têm supertipo comum (S U T)

elo(?X, Listas de ?X) -> Listas de ?X

elo(1, ["foo"]) ?X = Números U Strings

elo(1, 2) erro de tipo

Page 31: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

31/41

Sistema de tipos – compatibilidade Tipo de expressão deve ser compatível com contexto 2 + 3

Expressão: 2, tipo Números Contexto: □+3, tipo Números

S é compatível com T se S T⊆ Números é compatível com Números U Strings

S é parcialmente compatível com T se S T, mas S ∩ T ≠ ⊈ ∅ Números U Strings é parcialmente compatível com Strings U Caracteres

S é incompatível com T se S ∩ T = ∅ Números é incompatível com Strings

Page 32: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

32/41

Sistema de tipos – compatibilidade Listas de Números ⊆ Listas de ?X ?

Sim, desde que Números ⊆ ?X

Constraint solving

Page 33: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

33/41

Semântica Faz é traduzido para Racket Semântica dada pela tradução

Relativamente direta Tipagem estática perdida na tradução

Regras de tipo triviais em sua maioria E.g., + espera Números, produz Números Exceção: seletores

Page 34: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

34/41

Implementação 1654 linhas de Racket Integrada ao ambiente DrRacket

Page 35: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

35/41

Implementação 1654 linhas de Racket Integrada ao ambiente DrRacket

Linhas %Total

Integração DrRacket 202 12%Parsing 364 22%Semântica 839 51%Tradução 215 13%Miscelânea 34 2%TOTAL 1654 100%

Page 36: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

36/41

Validação com alunos Objetivos

Confirmar dificuldades com HtDP Comparação entre HtDP e Faz

Metodologia Enquete na lista da graduação da CIC Formulário anônimo online 60 alunos responderam

Algumas dificuldades relevantes com HtDP Sintaxe (60% dos alunos) Tipos de dados (13% dos alunos)

Page 37: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

37/41

Validação com alunos Comparação de linguagens "Em qual linguagem o programa é mais fácil de

compreender e seria mais fácil de escrever?"

Faz Racket Tanto fazBháskara 92% (55) 3% (2) 5% (3)Grafo 82% (49) 12% (7) 7% (4)

Page 38: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

38/41

Trabalhos relacionados Linguagens baseadas no português

Portugol

Linguagens funcionais De propósito geral

Família LISP (Scheme, Common Lisp, Clojure) Família ML (Standard ML, OCaml, Miranda, Haskell, Clean)

Didáticas LOGO, Helium

Outras linguagens didáticas Pascal Scratch, Squeak, Etoys

Tipagem estática em Racket Typed Racket

Faz = português + funcional + didática + tipagem (semi)-estática

Page 39: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

39/41

Conclusão Faz

Linguagem funcional didática baseada no português Visa a resolver os problemas com Racket, HtDP

Sintaxe Sistema de tipos

Integrada ao DrRacket

Page 40: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

40/41

Trabalhos futuros Ambiente

Error reporting Indentação e coloração automática Animação da execução (stepper)

Linguagem I/O, efeitos colaterais em seqüência Limitações no uso de polimorfismo Limitações em testes de pertinência

Formalização do sistema de tipos

Page 41: Faz: uma linguagem funcional didática - inf.ufrgs.brinf.ufrgs.br/~vbuaraujo/tcc/apresentacao.pdfFaz: uma linguagem funcional didática Vítor Bujés Ubatuba De Araújo Prof. Dr. Lucio

41/41

Obrigado!