Wstęp do Programowania potok funkcyjny

Podobne dokumenty
Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny

Wykład 6 Programowanie imperatywne w języku OCaml

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny

Języki i techniki programowania Ćwiczenia 2

Obiektowy Caml. Paweł Boguszewski

Wstęp do Programowania potok funkcyjny

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Podstawy Programowania C++

Programowanie w Turbo Pascal

Wstęp do Programowania potok funkcyjny

Podstawy Programowania semestr drugi. Wykład czternasty

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Technologie cyfrowe semestr letni 2018/2019

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wykład 7 Porównanie programowania funkcyjnego i imperatywnego

Zapis algorytmów: schematy blokowe i pseudokod 1

Wstęp do Programowania potok funkcyjny

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wstęp do Programowania potok funkcyjny

Wstęp do Programowania potok funkcyjny

Programowanie i struktury danych

Technologie cyfrowe semestr letni 2018/2019

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Wstęp do programowania

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

Języki formalne i techniki translacji

DYNAMICZNE PRZYDZIELANIE PAMIECI

Pascal - wprowadzenie

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Wstęp do programowania obiektowego, wykład 7

PHP: bloki kodu, tablice, obiekty i formularze

Liczby losowe i pętla while w języku Python

Część 4 życie programu

Programowanie Funkcyjne. Marcin Kubica Świder,

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Wstęp do programowania. Różne różności

Materiały do laboratorium MS ACCESS BASIC

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

PARADYGMATY PROGRAMOWANIA Wykład 3

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Podstawy programowania obiektowego

Podstawy programowania. Podstawy C# Tablice

Podstawy programowania w języku C

Zmienne i struktury dynamiczne

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe

Wstęp do programowania

Paradygmaty programowania

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Algorytmy i Struktury Danych. Anna Paszyńska

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Wstęp do programowania

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Wstęp do programowania

TEMAT : KLASY DZIEDZICZENIE

Podstawy programowania skrót z wykładów:

Wstęp do programowania

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Język C++ zajęcia nr 2

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

KOTLIN. Język programowania dla Androida

Delphi Laboratorium 3

Java EE produkcja oprogramowania

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie RAD Delphi

Definicje wyższego poziomu

Podstawy Programowania Podstawowa składnia języka C++

Programowanie w języku C++

Wykład 2 Składnia języka C# (cz. 1)

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Dynamiczne przetwarzanie stron. dr Beata Kuźmińska-Sołśnia

Kontrola przebiegu programu

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Ściągawka z Matlaba / Octave

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Ćwiczenie 1. Wprowadzenie do programu Octave

Wykład 3 Funkcje wyższych rzędów

Programowanie Komputerów

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Sztuczna Inteligencja Projekt

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Wstęp do programowania

MATERIAŁY DO ZAJĘĆ II

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Transkrypt:

Wstęp do Programowania potok funkcyjny Marcin Kubica 2010/2011

Outline Programowanie imperatywne 1 Programowanie imperatywne

Intuicje Programowanie imperatywne Paradygmat programowania imperatywnego: program modeluje fragment świata rzeczywistego, w świecie rzeczywistym mamy obiekty, które zmieniają swoje stany, w programie modelujemy je za pomocą obiektów obliczeniowych, które też mogą zmieniać stany, programowanie obiektowe dalej rozszerza tę analogię: klasyfikacja obiektów hierarchia klas, czynności metody.

Programowanie imperatywne Definition () Instrukcja = wyrażenie typu unit + efekty uboczne. to najprostsza imperatywna struktura danych. Wskaźnik lub pojemnik, którego zawartość można modyfikować. Odpowiada adresowi zmiennej w imperatywnych językach programowania. Operacje na referencjach: (ref) : a -> a ref ref w = nowa referencja, zawierająca początkowo w, (!) : a ref -> a!r wyłuskanie wartości, (:=) : a ref -> a -> unit r := w zmiana wartości,

i polimorfizm Kłopoty z referencjami i polimorfizmem. Referencja wskazuje na wartość przynajmniej tak ogólną jak typ referencji. Wyłuskując wskazywaną wartość polimorficzną możemy ją ukonkretnić. Przypisując wartość możemy podać wartość bardziej ogólną. Przypisując wartość konkretniejszą powodujemy ukonkretnienie typu referencji! (Dokładnie zmianę stanu wiedzy kompilatora o typie referencji.)

i polimorfizm Example let f x y = x;; val f : a -> b -> a = <fun> let g x y = x + 1;; val g : int -> a -> int = <fun> let h x y = x + y;; val h : int -> int -> int = <fun> let i x y = if y then x else 2 * x;; val i : int -> bool -> int = <fun> let r = ref g;; r := f;; r := h;; zmienia się typ r! r := i;; błąd

Definition wyrażenie ::= wyrażenie { ; wyrażenie } + begin wyrażenie end if wyrażenie then wyrażenie w 1 ; w 2 ;... ; w n sekwencja instrukcji, begin...end nawiasy, blok, if w then x równoważne if w then x else (),

Definition wyrażenie ::= while wyrażenie do wyrażenie done for identyfikator = wyrażenie [ to downto ] wyrażenie do wyrażenie done while w do... done Pętla, powtarzamy dopóki w = true, for v = w 1 to w 2 do... done Pętla, v przebiega kolejne wartości całkowite od w 1 do w 2,

Definition Wypisywanie: print_int : int -> unit print_float : float -> unit print_string : string -> unit print_newline : unit -> unit Wczytywanie: read_int : unit -> int read_float : unit -> float read_line : unit -> string

Tablice Programowanie imperatywne Definition Tablice: typ a array, jednowymiarowe, indeksowane liczbami całkowitymi od 0, macierz = tablica tablic, moduł Array.

Tablice Programowanie imperatywne Definition [ x 1 ;...; x n ] konstruktor tablic, make : int -> a -> a array make n x = nowa tablica rozmiaru n równa [ x;...; x ], init : int -> (int -> a) -> a array init n f = nowa tablica rozmiaru n równa [ f 0; f 1;...; f (n-1) ], get : a array -> int -> a a.(n) = get a n = n-ty element tablicy a, elementy są numerowane od 0 do length a - 1, set : a array -> int -> a -> unit a.(n) <- x = set a n x przypisanie n-temu elementowi tablicy wartości x,

Tablice Programowanie imperatywne Definition length : a array -> int length a = długość tablicy, make_matrix : int -> int -> a -> a array array make_matrix m n x = macierz, tablica m-elementowa tablic n-elementowych wypełnionych wartościami x, map : ( a -> b) -> a array -> b array analogiczne do List.map, fold_left : ( a -> b -> a) -> a -> b array -> a analogiczne do List.fold_left, fold_right : ( a -> b -> b) -> a array -> b -> b analogiczne do List.fold_right.

Obiekty i stany Programowanie imperatywne Jak tworzyć obiekty, które mogą zmieniać stan? Najprostszym obiektem, który może zmieniać stan są referencje. Można tworzyć obiekty lokalne, dostępne tylko wybranym procedurom. Obiekt = procedura + wartości lokalne.

Example let generator s = let r = ref s in function x -> begin r :=!r + x;!r end;; Każde wywołanie tworzy osobną ramkę zawierającą referencję. Wynikiem jest procedura, która ma dostęp do tej referencji. let o = generator 0;; o 22;; - : int = 22 o 20;; - : int = 42

Konto bankowe Programowanie imperatywne Example let konto pocz = let saldo = ref pocz in let wplata kwota = if kwota > 0 then begin saldo :=!saldo + kwota;!saldo end else failwith "Ujemna lub zerowa kwota" and wyplata kwota = if kwota > 0 then if kwota <=!saldo then begin saldo :=!saldo - kwota;!saldo end else failwith "Brak środków na koncie" else failwith "Ujemna lub zerowa kwota" in (wplata, wyplata);;

Konto bankowe Programowanie imperatywne Example let (wplac, wyplac) = konto 0;; wplac 50;; wyplac 8;; Co by było gdyby konto nie miało argumentu pocz? let konto = let saldo = ref 0 in...

Konto bankowe Programowanie imperatywne Example let (wplac, wyplac) = konto 0;; wplac 50;; wyplac 8;; Co by było gdyby konto nie miało argumentu pocz? let konto = let saldo = ref 0 in...

Metoda Monte Carlo Definition Wynaleziona przez Johna von Neumanna, Stanisława Ulama i Nicholasa Metropolisa, w ramach projektu Manhattan. Pierwotnie użyta do badania rozchodzenia się swobodnych neutronów w różnych substancjach. Metoda przybliżania probabilistycznego rozmaitych wartości. Polega na wielokrotnym losowaniu elementów pewnego zbioru i sprawdzaniu, czy mają określoną własność. W ten sposób przybliżamy prawdopodobieństwo, z jakim dane ze zbioru mają daną własność. Na podstawie przybliżonego prawdopodobieństwa można przybliżyć szukaną wartość.

Metoda Monte Carlo Example Generyczna implementacja metody Monte Carlo: let montecarlo dane wlasnosc liczba_prob = let rec montecarlo_rec a n = if n = 0 then a else if wlasnosc (dane ()) then montecarlo_rec (a+1) (n-1) else montecarlo_rec a (n-1) in float (montecarlo_rec 0 liczba_prob) /. float (liczba_prob);;

Przybliżenie liczby π Programowanie imperatywne Example Prawdopodobieństwo trafienia w koło jednostkowe = π 4 let square x = x *. x;; let kolo (x, y) = square x +. square y <= 1.0;; let kwadrat () = (losowa_od_do (-1.0) 1.0, losowa_od_do (-1.0) 1.0);; let pi = 4.0 *. (montecarlo kwadrat kolo 1000);;

Metoda Monte Carlo Example let losowa_od_do od doo = losowa () *. (doo -. od) +. od;; let losowa () = let duzo = 1000 in let l = float (losowy_int () mod (duzo + 1)) /. float (duzo) in if l < 0.0 then (-. l) else l;;

Metoda Monte Carlo Example let losowy_int = let stan = ref 0 and a = 937126433 and b = 937187 in function () -> (stan :=!stan * b + a;!stan);; Tylko odrobina imperatywności. Jak wyglądałby ten program bez imperatywności?

Metoda Monte Carlo Example let losowy_int = let stan = ref 0 and a = 937126433 and b = 937187 in function () -> (stan :=!stan * b + a;!stan);; Tylko odrobina imperatywności. Jak wyglądałby ten program bez imperatywności?

Cena programowania imperatywnego Kłopoty z pojęciem tożsamości: Kiedy x i y to to samo? Równość struktur danych =. Tożsamość struktur danych ==. Niezależność struktur danych. Źródła błędów programistycznych: Kolejność instrukcji. Zależności między strukturami danych. Efekty uboczne. Programowanie współbieżne różnice stają się jeszcze bardziej widoczne. Szczypta imperatywności może uprościć strukturę programu.