Wstęp do programowania

Podobne dokumenty
Programowanie funkcyjne w Pythonie

Wstęp do programowania

Wstęp do programowania

Wstęp do programowania

Python i programowanie funkcyjne. Python i programowanie funkcyjne czyli nie tylko obiektowość rządzi. OSEC Funkcyjnie w języku Python 1 z 40

Paradygmaty programowania

Wstęp do programowania

Zaawansowany kurs języka Python

Programowanie Funkcyjne. Marcin Kubica Świder,

Wstęp do programowania

Programowanie i projektowanie obiektowe

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

Wstęp do programowania

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

λ parametry. wartość funkcji suma = λ x y. x + y kwadrat = λ x. x * x K.M. Ocetkiewicz, 2008 WETI, PG 2 K.M. Ocetkiewicz, 2008 WETI, PG 3

Wstęp do Programowania potok funkcyjny

Wstęp do programowania

Programowanie - wykład 4

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Programowanie obiektowe

Programowanie i projektowanie obiektowe

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Podstawy programowania funkcjonalnego

Programowanie obiektowe

Python. Wprowadzenie. Jolanta Bachan

Common Lisp - funkcje i zmienne

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Język Python. Język Python 1/35


Język Python (2) Język Python (2) 1/36

Programowanie obiektowe

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

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

Algorytmy i struktury danych

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Języki i metody programowania

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Środowisko programisty

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Wykresy i interfejsy użytkownika

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Python. Skąd taka nazwa? Kurs systemu UNIX 1

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Ćwiczenia z przetwarzania tablic 2D

Podstawy programowania w Pythonie

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

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

I. KARTA PRZEDMIOTU CEL PRZEDMIOTU WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI EFEKTY KSZTAŁCENIA

Programowanie obiektowe

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

Programowanie robota mobilnego E-puck w języku Python

Języki i paradygmaty programowania. I. Wprowadzenie

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Składnia funkcji i Rekurencja w języku Haskell

Wstęp do programowania

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

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

Języki i paradygmaty programowania

Definicje. Algorytm to:

Plan. krótkie opisy modułów. 1 Uwagi na temat wydajności CPython a. 2 Podstawowe techniki poprawiające wydajność obliczeniową

Metody Metody, parametry, zwracanie wartości

Programowanie w języku C++ Podstawowe paradygmaty programowania

Wstęp do programowania

Zaawansowany kurs języka Python

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

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

Wstęp do programowania

Warunki logiczne instrukcja if

Funkcje i instrukcje języka JavaScript

Wstęp do Pythona. Janusz Szwabiński. Python w obliczeniach numerycznych (C) 2005 Janusz Szwabiński p.1/36

Wrocław, Wstęp do informatyki i programowania: liczby pierwsze. Wydział Matematyki Politechniki Wrocławskiej.

Przegląd języka Python. Łukasz Anwajler

4. Funkcje. Przykłady

1 Programowanie w matlabie - skrypty i funkcje

Programowanie i projektowanie obiektowe

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Język C, instrukcje sterujące (laboratorium)

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

System operacyjny Linux

Programowanie - instrukcje sterujące

Technologie cyfrowe semestr letni 2018/2019

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Plan Przegląd podstawowych typów i konstrukcji języka

JAVAScript w dokumentach HTML - przypomnienie

Konstrukcje warunkowe Pętle

Pascal - wprowadzenie

Algorytm. a programowanie -

Kurs rozszerzony języka Python

Transkrypt:

Wstęp do programowania Programowanie funkcyjne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 1 / 25

Paradygmaty programowania Programowanie imperatywne Program składa się z ciągu instrukcji, które zmieniają stan programu. Stan wykonania programu wartości zmiennych globalnych wartości zmiennych lokalnych (wewnętrznych dla funkcji) stos wykonania aktualnie wykonywana instrukcja P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 2 / 25

Paradygmaty programowania Programowanie funkcyjne Program jest definicją funkcji (w sensie matematycznym) ze zbioru danych wejściowych w zbiór wyników. Funkcja czysta (ang. pure function) Funkcja (w rozumieniu języka programowania), która nie ma żadnych efektów ubocznych w szczególności: nie zmienia wartości zmiennych nie wykonuje operacji wejścia/wyjścia P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 3 / 25

Prosty przykład Zadanie Obliczyć wartość częściowo niepoprawnego wyrażenia postaci: Rozwiązanie imperatywne 28+32+++32++39 expr, r e s = "28+32+++32++39", 0 f o r t i n e x p r. s p l i t ( "+" ) : i f t!= "" : r e s += i n t ( t ) p r i n t r e s Wykonanie "28+32+++32++39", 0 "28", 0 "32", 28 "", 60 "", 60 "32", 60 "", 92 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 4 / 25

Prosty przykład Zadanie Obliczyć wartość częściowo niepoprawnego wyrażenia postaci: Rozwiązanie funkcyjne 28+32+++32++39 from o p e r a t o r import add e x p r = "28+32+++32++39" p r i n t reduce ( add, map( i n t, f i l t e r ( bool, e x p r. s p l i t ( "+" ) ) ) ) Wykonanie "28+32+++32++39" ["28","32","","","32","","39"] ["28","32","32","39"] [28,32,32,39] 131 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 5 / 25

Funkcje w Pythonie Funkcje nazwane d ef f ( x ) : r e t u r n x+1 Funkcje anonimowe f=lambda x : x+1 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 6 / 25

λ-wyrażenia Składnia lambda_expr ::= "lambda"[parameter_list]: expression Napis: name=lambda arguments : e x p r e s s i o n jest równoważny napisowi: def name ( arguments ) : r e t u r n e x p r e s s i o n Argumenty Definicja argumentów λ-wyrażeń jest taka jak funkcji. Dozwolone są argumenty pozycyjne i nazwane, wartości domyślne, etc. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 7 / 25

Funkcje to wartości First-class functions Python traktuje funkcje jako wartości. Można je przypisywać na zmienne, przekazywać jako argumenty i zwracać z funkcji. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 8 / 25

Moduł operator Moduł operator zawiera funkcje odpowiadające operatorom języka Python np.: operators.add(a,b) a+b operators.mul(a,b) a*b operators.lt(a,b) a<b operators.getitem(a,b) a[b] P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 9 / 25

Pętle W czystym programowaniu funkcyjnym nie stosuje się pętli. Przykład name = None w h i l e name i s None : name = raw_input ( ) i f l e n ( name ) < 2 : name = None d ef get_name ( ) : name = raw_input ( ) r e t u r n name i f l e n ( name ) >= 2 e l s e get_name ( ) raw_input() nie jest czystą funkcją. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 10 / 25

Pętle c.d Przykład sum=0 f o r i i n l i s t : sum+=i d ef sum ( l i s t, acc =0): r e t u r n acc i f l e n ( l i s t )==0 e l s e sum ( l i s t [ 1 : ], acc+ l i s t [ 0 ] ) P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 11 / 25

Pętle c.d Przykład sum=0 f o r i i n l i s t : sum+=i d ef sum ( l i s t, acc =0): r e t u r n acc i f l e n ( l i s t )==0 e l s e sum ( l i s t [ 1 : ], acc+ l i s t [ 0 ] ) Prawdziwe języki funkcyjne mają składnię pozwalającą dopasowywać definicję funkcji do parametrów. SML fun sum ( n i l ) = 0 sum ( head : : t a i l ) = head+sum ( t a i l ) ; P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 11 / 25

Funkcja map map : (A B) A B map(function, iterable,...) aplikuje funkcję do wszystkich elementów listy. Przykłady >>> map(lambda x:x**2, range(10)) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> map(operator.add, range(10), range(9,-1,-1)) [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] Wszystkie listy przekazywane do map muszą być jednakowej długości. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 12 / 25

Funkcja map map : (A B) A B map(function, iterable,...) aplikuje funkcję do wszystkich elementów listy. Przykłady >>> map(lambda x:x**2, range(10)) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> map(operator.add, range(10), range(9,-1,-1)) [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] Alternatywnie >>> [x**2 for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] >>> [x[0]+x[1] for x in zip(range(10), range(9,-1,-1))] [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] >>> zip(range(10), range(9,-1,-1)) [(0, 9), (1, 8), (2, 7), (3, 6), (4, 5), (5, 4), (6, 3), (7, 2), (8, 1), (9 P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 13 / 25

Funkcja filter filter : (A {True, False}) A A filter(function, iterable) zwraca elementy listy, dla których funkcja daje wartość True. Przykłady >>> filter(lambda x:x%2==0, range(10)) [0, 2, 4, 6, 8] Alternatywnie >>> [x for x in range(10) if x%2==0] [0, 2, 4, 6, 8] P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 14 / 25

Funkcja reduce reduce : (B A B) A B B reduce(function, iterable[, initializer]) używa funkcji do kumulatywnego obliczenia pojedynczej wartości na podstawie listy. reduce(f, [l 1, l 2,..., l n ], a) = f (f (f (f (a, l 1 ), l 2 ),...), l n ) reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) == ((((1+2)+3)+4)+5) P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 15 / 25

Przydatne gadżety all, any all, any : {True, False} {True, False} all([l 0,..., l n 1 ] = 0 i<n l i any([l 0,..., l n 1 ] = 0 i<n l i enumerate enumerate : A (N A) enumerate([l 0, l 1,..., l n 1 ]) = [(0, l 0 ), (1, l 1 ),..., (n 1, l n 1 )] zip zip : A B (A B) zip([a 0, a 1,..., a n 1 ], [b 0, b 1,..., b n 1 ]) = [(a 0, b 0 ), (a 1, b 1 ),..., (a n 1, b n 1 )] P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 16 / 25

Funkcje wyższego rzędu Funkcje, które przyjmują funkcje jako argumenty (np. map), albo zwracają funkcje. Przykład W Pythonie d ef pow ( n ) : r e t u r n lambda x : x n pow : N (R R) pow(n) = λx.x n albo def pow ( n ) : d e f f ( x ) : r e t u r n x n r e t u r n f P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 17 / 25

Częściowa aplikacja Przykład partial : ((A B) C) A (B C) partial(f, a) = λb.f (a, b) d ef l o g ( l e v e l, message ) : p r i n t " [ { l e v e l } ] : {msg}". format ( l e v e l=l e v e l, msg=message ) from f u n c t o o l s import p a r t i a l debug = p a r t i a l ( log, " debug " ) debug ( " S t a r t d o ing something " ) debug ( " Continue with something e l s e " ) debug ( " F i n i s h e d. P r o f i t?" ) Zamiast d ef debug ( message ) : l o g ( " debug ", message ) P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 18 / 25

Currying rozwijanie funkcji curry : (A B C D) (A (B (C D))) curry(f ) = λa.λb.λc.f (a, b, c) Przykład d ef c u r r y ( f ) : r e t u r n lambda a : lambda b : f ( a, b ) c u r r i e d a d d=c u r r y ( o p e r a t o r. add ) addone=c u r r i e d a d d ( 1 ) addtwo=c u r r i e d a d d ( 2 ) P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 19 / 25

Zadanie 1 my_max, my_min Zaimplementuj funkcje my_max i my_min znajdujące odpowiednio największy i najmniejszy element w liście. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 20 / 25

Zadanie 2 my_zip Wykonaj własną implementację funkcji zip. Czy da się do zrobić bez użycia pętli? P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 21 / 25

Zadanie 3 złożenia funkcji Zdefiniuj funkcję realizującą operator złożenia dwóch funkcji: (g f )(x) = g(f (x)) Zdefiniuj funkcję obliczającą złożenie dowolnej liczby funkcji. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 22 / 25

Zadanie 4 sumy Napisz możliwie najprostszy zestaw funkcji obliczających sumy: kolejnych k liczb naturalnych kwadratów kolejnych k liczb naturalnych logarytmów kolejnych k liczb naturalnych czegokolwiek kolejnych k liczb naturalnych P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 23 / 25

Zadanie 5* Lata przestępne Napisz funkcję obliczającą zadaną liczbę lat przestępnych począwszy od podanego roku. Wskazówka Pomocne mogą być funkcje z modułu itertools. P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 24 / 25

Strona wykładu http://bioexploratorium.pl/wiki/wstęp_do_programowania 2013z P. Daniluk(Wydział Fizyki) WP w. XIV Jesień 2013 25 / 25