A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.

Apresentações semelhantes


Apresentação em tema: "Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro."— Transcrição da apresentação:

1 Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres boeres@inf.ufes.br CT VII - Sala 34 Departamento de Informática Centro Tecnológico Universidade Federal do Espírito Santo Co-Autoria: Clebson Oliveira

2 Validação de Dados Como sabemos, toda função tem um domínio e um contradomínio. No interpretador do Haskell, quando tentamos avaliar uma instância de uma definição, usando valores fora desse domínio, podemos receber como resposta mensagens nem sempre esclarecedoras; Quando se trata do usuário de nosso programa, este tipo de mensagem é ainda mais indesejável; Os programadores, que descrevem as funções, podem discernir com mais facilidade a natureza dos problemas que ocorrem durante o seu desenvolvimento; O mesmo não se pode esperar de alguém que não tem conhecimento dos elementos internos às descrições das nossas funções.

3 Tipos de Erro Tipicamente os erros são de duas naturezas. Pode ser que o tipo da instância esteja correto, mas nossa definição use alguma função primitiva que não se aplica ao valor da instância:

4 Tipos de Erro Outro tipo de problema ocorre quando o tipo de algum parâmetro da nossa instância não casa com o tipo inferido pelo interpretador. Por exemplo, se usamos um valor do tipo Float para y, obtemos:

5 Caracterização do Problema Desejamos construir uma função que seja uma extensão da função original (fx) e ao mesmo tempo lhe sirva como uma casca de proteção contra as violações de domínio;

6 Uma solução geral bastante conveniente é construir um novo contradomínio (NCD) para fx (extensão de f), formado por pares onde o primeiro elemento é do tipo boolean e o segundo do contradomínio de f: NCD(fx) = (boolean, CD(f)) Projeto da Solução

7 Para valores de x no domínio de f, teremos: fx x = (True, f x ) Para os valores de x fora do domínio teremos: fx x = (False, k ) » onde k é um valor qualquer pertencente ao contradomínio de f. Projeto da Solução

8 fx x y z = if invalido x y z then (False,0) else (True, f x y z) where invalido x y z =... f x y z = div x y + z Solução

9 Sabemos que o universo é definido pelos tipos dos três parâmetros (a, b, c), é maior que o domínio da função; Ou seja, a função não está definida para instâncias de a, b e c, onde se verifica a seguinte desigualdade: (b^2) + (4 * a * c) < 0 Exemplo – Raízes do 2º grau

10 Solução 1: re2gx a b c = (not (delta < 0), if delta < 0 then (0,0) else (x1, x2)) where delta = (b ^ 2) - (4 * a * c) x1 = ((-b) + sqrt delta) / (2 * a) x2 = ((-b) - sqrt delta) / (2 * a) Exemplo – Raízes do 2º grau

11 Solução 2: re2gx a b c = if delta < 0 then (False, (0, 0)) else (True, (x1, x2)) where delta = (b ^ 2) - (4 * a * c) x1 = ((-b) + sqrt delta) / (2 * a) x2 = ((-b) - sqrt delta) / (2 * a) Exemplo – Raízes do 2º grau

12 Faça uma função estendida para: f x y = 1/(x+y) Exercício fx x y = if invalido x y then (False,0) else (True, f x y) where invalido x y = x+y == 0 f x y = 1/(x+y)


Carregar ppt "Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro."

Apresentações semelhantes


Anúncios Google