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

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

® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack Professor:

Apresentações semelhantes


Apresentação em tema: "® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack Professor:"— Transcrição da apresentação:

1 ® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack lmf2@cin.ufpe.brrlmb@cin.ufpe.br Professor: André Santos

2 Roteiro Configurando o ambiente Sintaxe –Estruturas Básicas –Listas, Tuplas e Arrays –Estruturas de Controle –Expressões Condicionais –Criação de Tipos –Funções –Tipos Algébricos –Casamento de Padrões –Acessando.NET –Classes e Objetos Chamando C# de F# Chamando F# de C# Exemplos de Aplicações

3 Configurando o Ambiente para o Desenvolvimento no VS Primeiramente, deve-se descompactar o arquivo FSharp-1.1.13.8.zip Em seguida, executar o arquivo InstallFSharp.msi

4 Configurando o Ambiente para o Desenvolvimento no VS Com o compilador instalado, agora devemos criar um projeto F# (File -> New -> Project -> Other Projects -> F# Projects) Em seguida, devemos criar uma classe de F# (.fs file) Agora é só escrever o código, compilar (ctrl+shift+B) e executar (F5)

5 Desenvolvendo sem o VS Pode-se escrever o código em algum editor de texto (Notepad++ ou Context) e salvá-lo com a extensão.fs Com o prompt, então, podemos compilar o código executando o arquivo fsc.exe (fsc ) E em seguida, executá-lo

6 Hello World printf “Hello World”;; let x = 3 + (4 * 5);; let res = (if x = 23 then "correct" else "incorrect");; printf "%s" res ;;

7 Sintaxe - Estruturas Básicas Constantes –Inteiros: 4096, 0xFF –String: “Hello”, “Tab\tTab” –Ponto Flutuante: 3.1215, 1000.045, 1.0e6, Operadores –+, -, *, /, % –&&, || –=, <>,, =

8 Sintaxe – Listas Listas –Muito utilizadas –São imutáveis Não se pode apagar um elemento de uma lista. Pode- se criar uma nova lista sem este elemento [] -> Lista vazia [“Hello”; “World”] -> Lista com 2 elementos “Hello” :: [“World”] -> Lista criada com adição de elemento na frente [“Hello”] @ [“World”] -> Concatenação de listas

9 Sintaxe – Tuplas Tuplas –Permite agrupar valores de tipos diferentes em um único elemento (3, 4);; -> Um par de inteiros (“Hello”, 4, “World”);; -> Uma tripla de Strings e um inteiro let addThree (a,b,c) = a + b + c;; let addPairs (a,b) (d,e) = (a+d, b+e) ;;

10 Sintaxe – Arrays Arrays let arr = Array.create 3 "" do arr.(0) <- "hello" do arr.(1) <- " " do arr.(2) <- "world" let str = string.Join("",arr);;

11 Sintaxe – Expressões Condicionais Expressões Condicionais if (4 > 3) then "Hello\n" else "Goodbye\n“;; if (4 = 3) then AddThree(1,3,5) else 6 + 7;;

12 Sintaxe – Estruturas de Controle Estruturas de Controle let y = 5;; let z = ref y;; while (!z > 3) do z := !z - 1; printf “z = %d\n" !z; done; let x = Array.create 3 1;; for i = 0 to Array.length(x) - 1 do printf "x[%d] = %d\n" i x.(i); done;

13 Sintaxe – Criação de Tipos Criação de Tipos type key_value = { key : string; value : string; } let test = { key="a"; value=“Hello" };; printf "key = %s\n" test.key;;

14 Sintaxe – Estruturas Básicas É possível criar tipos que recebem valores genéricos (polimorfismo paramétrico) type ('a, 'b) key_value_g = { key : 'a; value : 'b; } let sth_g = { key=10; value="deset"; };; printf "key = %d\n" sth_g.key;;

15 Sintaxe – Funções Podemos criar 2 tipos de funções: –Iterativas Precisam utilizar o símbolo ‘!’ para manipular os valores de constantes –Recursivas Necessita do uso da palavra ‘rec’ Função fatorial iterativa let fac (n) = let ret = ref 1 in for i = 1 to n do ret := !ret * i; done; printf "Fatorial(%d) = %d\n" n !ret;; fac (3);

16 Sintaxe - Funções Função fatorial recursiva let rec fac1(n) = if (n = 0) then 1 else n * fac1(n-1);; let r = fac1(4);; printf "Resultado = %d\n" r;;

17 Sintaxe – Funções Outro exemplo de função recursiva: Fibonacci let rec fib n = if n <= 2 then 1 else fib (n-2) + fib(n-1);; let f = fib(5);; printf "Resultado = %d\n" f;;

18 Sintaxe – Funções Função lambda –Podemos armazenar uma função em uma variável e chamá-la sempre que quisermos let lambda = (fun x -> x + 1);; printf "res = %d\n" (lambda 3);; let tmp = List.map lambda [1;2;3];; let aux = List.to_array tmp;; for j = 0 to Array.length(aux) - 1 do printf "x[%d] = %d\n" j aux.(j); done;;

19 Exercício 1 Crie uma função Map (ela recebe uma função e uma lista como parâmetros e retorna uma lista cujos elementos sofreram a aplicação da função) Crie um caso de teste para validar sua função.

20 Sintaxe – Tipos Algébricos Casamento de Padrões type weekday = Monday | Tuesday | Wednesday | Thursday | Friday let workRate (d:weekday) = match d with | Monday -> 1 | Tuesday -> 2 | Wednesday -> 3 | Thursday -> 4 | Friday -> 5;; let day = workRate Monday;; printf "dia = %d\n" day;;

21 Sintaxe – Tipos Algébricos Casamento de Padrões type expr = Num of int | Add of expr * expr | Sub of expr * expr let rec eval e = match e with | Num n -> n | Add (x,y) -> eval x + eval y | Sub (x,y) -> eval x - eval y;; let exp = Add(Sub(Num 10,Num 5), Num 3) let result = eval exp;; printf "resultado = %d\n" result;;

22 Sintaxe – Casamento de Padrões Casamento de Padrões match ("abc","def") with (x,y) -> printf "x = %s, y = %s" x y;; let (x,y) = ("abc","def") in printf "x = %s, y = %s" x y;;

23 Sintaxe – Acessando.NET type room = string;; type number = int;; type date = System.DateTime;; type meeting = | Personal of room * date | Phone of number * date;; let review = Phone(32,new System.DateTime(2006,05,26));; let dateOfMeeting (a:meeting) = match a with | Personal(_,d) -> d | Phone(_,d) -> d;; let data = dateOfMeeting review;; let dia = data.Day;; printf “dia = %d\n" dia;;

24 Sintaxe – Classes e Objetos Classes type MyObj = class val first : int val mutable second : int new(a,b) = { first=a; second=b } member x.First = x.first member x.Second with get() = x.second and set(v) = x.second <- v member x.Write() = printf "f=%i, s=%i\n" x.first x.second end let obj = new MyObj(1,2);; obj.Write();;

25 Exercício 2 Crie uma classe Retangulo com atributos Largura e Altura e os métodos Área, Perímetro e Print, que imprime a largura, a altura, a área e o perímetro. Crie uma instância dessa classe e chame o método Print.

26 Chamando F# de C# Para que seja possível chamar funções criadas em F# a partir de C#, é necessário criar uma biblioteca de funções F# (.dll) Em seguida, simplesmente utilize-a como qualquer outra biblioteca (lembrando que as chamadas de função deverão seguir a sintaxe de C# -> deve-se colocar parênteses)

27 Chamando F# de C# F# let rec loop n = if n <= 0 then () else begin print_endline (string_of_int n); loop (n-1) end type MyData = A | B of int * MyData let rec MyDataPrint d = match d with A -> print_endline "the end!" | B (n,d) -> print_endline (string_of_int n); MyDataPrint d let rec MyDataMap f d = match d with A -> A | B (n,d) -> B (f n,MyDataMap f d)

28 Chamando F# de C# C# class Tester { static void Main() { Mydll.loop(10); Mydll.MyData x1 = Mydll.MyData.A(); Mydll.MyData x2 = Mydll.MyData.B(3,x1); Mydll.MyData x3 = Mydll.MyData.B(2,x2); Mydll.MyData x4 = Mydll.MyData.B(1,x3); Mydll.MyDataPrint(x4); Mydll.MyData x5 = Mydll.MyDataMap(FuncConvert.ToFastFunc(new System.Converter(square)), x4); Mydll.MyDataPrint(x5); if (Mydll.MyData.IsB(x5)) System.Console.WriteLine("Correct!"); } static object square(object x) { return (int) x * (int) x; } }

29 Chamando C# de F# open System.Windows.Forms;; let form = new Form();; let guiRefresh g = printf "refresh!\n";; form.Paint.Add(fun e -> guiRefresh e.Graphics);; let handler = new PaintEventHandler(fun sender e -> guiRefresh e.Graphics);; form.Paint.AddHandler(handler);; form.Paint.RemoveHandler(handler);; open System.Threading;; let t = new Thread(new ThreadStart(fun () -> printf "thread started!\n"));; t.Start();;

30 Exemplos de Aplicações – Teapot Renderer

31 Exemplos de Aplicações - Ray Tracer

32 Exemplos de Aplicações - Sudoku Solver

33 Exemplos de Aplicações - Visualizador de montador de Genoma Segundo o head of computational genomics do DOE Joint Genome Institute, Darren Platt, ele nunca viu um visualizador de montador de genoma tão rápido. –500 linhas de código

34 Outras Aplicações Jogo para XBOX 360 (F# e XNA) –Dandy Dungeon Jogo de xadrez chinês Compilador para Java HDFS (Hardware Design and Simulation) –Biblioteca para projeto de hardware –Implementação para FPGA´s e ASIC´s

35 Referências http://www.ffconsultancy.com/dotnet/fsharp/raytracer/index.html http://www.strangelights.com/fsharp/ http://research.microsoft.com/fsharp/fsharp.aspx http://strangelights.com/fsharp/Wiki/default.aspx http://cs.hubfs.net/ http://blogs.msdn.com/dsyme/ http://cs.hubfs.net/forums

36 ® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack lmf2@cin.ufpe.brrlmb@cin.ufpe.br Professor: André Santos


Carregar ppt "® Tópicos Avançados em Linguagens Computacionais – IF724 Aula Prática – FSharp (F#) Leandro Mitsuo Rodrigo Lumack Professor:"

Apresentações semelhantes


Anúncios Google