Haskell Moduły Ładowanie

Podobne dokumenty
Moduły. Źródło: a) Wczytywanie modułów. interparse rozdziela każdy element listy wcześniej podanym znakiem

Moduł to zbiór powiązanych ze sobą funkcji, typów i klas typu. Język Haskell stanowi zbiór modułów, gdzie moduł główny załącza pozostałe moduły w

HASKELL. Higher order functions, Modules. Janusz Bugajny Piotr Rogulski Łukasz Antoszkiewicz

WEJŚCIE/WYJŚCIE HASKELL ŁUKASZ PAWLAK DARIUSZ KRYSIAK

Języki programowania Haskell

- nawiasy kwadratowe oznaczają, że to lista

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

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

PARADYGMATY I JĘZYKI PROGRAMOWANIA. Haskell. (w11)

SQL (ang. Structured Query Language)

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Składnia funkcji i Rekurencja w języku Haskell

Języki i Paradygmaty Programowania

Programowanie i struktury danych

Smarty PHP. Leksykon kieszonkowy

Tabela wewnętrzna - definicja

Podstawy programowania. Podstawy C# Tablice

Zatem w jaki sposób nasze programy mają komunikować się ze światem zewnętrznym?

Prezentacja o Haskell u(rozdział 3 i 4)

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Elementy języka Haskell

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

Wykład 9 Kolekcje, pliki tekstowe, Przykład: Notatnik

TWORZENIE SWOICH TYPÓW I TYPÓW KLAS HASKELL (RODZIAŁ 8) ZAJĘCIA 4

Oracle PL/SQL. Paweł Rajba.

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

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

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy danych - wykład wstępny

Dr Michał Tanaś(

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

Praca w środowisku Visual Studio 2008, Visual C

Język ludzki kod maszynowy

2 Przygotował: mgr inż. Maciej Lasota

Struktury, unie, formatowanie, wskaźniki

Programowanie funkcyjne wprowadzenie Specyfikacje formalne i programy funkcyjne

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

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Oczywiście plik musi mieć rozszerzenie *.php

Programowanie obiektowe

Java Podstawy. Michał Bereta

Informatyka 1. Przetwarzanie tekstów

Podstawy Programowania

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wykład 5. SQL praca z tabelami 2

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

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

Podstawy programowania funkcjonalnego

Wykład 8: klasy cz. 4

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Przydatne sztuczki - sql. Na przykładzie postgres a.

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wykład 8. SQL praca z tabelami 5

Serwer WWW Apache. Plik konfiguracyjny httpd.conf Definiujemy m.in.: Aktualne wersje 2.4.6, , zakończony projekt

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

Backend Administratora

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

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Załącznik nr 2 do Umowy Nr. o korzystanie z usługi Identyfikacji Przychodzących Płatności Masowych z dnia.

Obliczenia, zmienne. Proste działania, zmienne, rodzaje zmiennych, proste operacje i działania na zmiennych.

Programowanie funkcyjne (Haskell Wprowadzenie) Kowalik Adrian

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie komputerowe. Zajęcia 4

Programowanie 2009 Programming 2009

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Funkcje w PL/SQL Funkcja to nazwany blok języka PL/SQL. Jest przechowywana w bazie i musi zwracać wynik. Z reguły, funkcji utworzonych w PL/SQL-u

ROZDZIAŁ 8: KLASY TYPÓW

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Języki i techniki programowania Ćwiczenia 4 Wzorce

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

Laboratorium nr 10. Temat: Funkcje cz.2.

Definicje wyższego poziomu

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

5 Przygotował: mgr inż. Maciej Lasota

Część 4 życie programu

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

Przetwarzanie tekstu 2. Operacje na plikach tekstowych w systemie Linux

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

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Programowanie 3 - Funkcje, pliki i klasy

java.util.* :Kolekcje Tomasz Borzyszkowski

System imed24 Instrukcja Moduł Analizy i raporty

Podstawy i języki programowania

1 Powtórzenie wiadomości

Paradygmaty programowania

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Nowe funkcje w programie SYMFONIA Handel Premium w wersji 2009

Programowanie współbieżne i rozproszone

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Transkrypt:

Haskell Moduły Moduł zestaw powiązanych funkcji, typów, typeclass. Program w Haskellu często jest modułem, który ładuje inne moduły a następnie wykorzystuje zdefiniowane w nich funkcje w celu realizacji postawionego zadania. Haskell dostarcza w postaci modułów bibliotekę funkcji pozwalających np. na: operacje na liczbach zespolonych, operacje na listach, programowanie współbieżne itp. Domyślnie importowany jest moduł Prelude, z którego dotychczas korzystaliśmy.

Haskell Moduły Ładowanie Załadowanie modułu: np.: import <nazwa modułu> import Data.List Od tego momentu exportowane przez Data.List funkcje itp. są dostępne. Np.: import Data.List numuniques :: (Eq a) => [a] > Int numuniques = length. nub

Haskell Moduły Ładowanie Używając ghci można załadować moduł poprzez: ghci > :m + Data.List Można również załadować jednocześnie wiele modułów: ghci > :m + Data.List Data.Map Data.Set Funkcje eksportowane przez załadowane w ten sposób moduły dostępne są w globalnej przestrzeni nazw tzn. można się do nich odwoływać przez ich nazwy.

Haskell Moduły Ładowanie W przypadku potrzeby użycia tylko kilku z funkcji eksportowanych przez moduł możn użyć formy: import Data.List (nub, sort) Spowoduje to, że funkcji nub i sort z modułu Data.List będą dostępne w globalnej przestrzeni nazw. Inną możliwością jest użycie wszystkich funkcji modułu z wyjątkiem wymienionych: import Data.List hiding (nub) W tym przypadku funkcja nub nie będzie dostępna w globalnej przestrzeni nazw.

Haskell Moduły Ładowanie Użycie formy: import qualified Data.Map Spowoduje, że użycie funkcji eksportowanej przez moduł będzie wymagało wyspecyfikowanie nazwy kwalifikowanej np.: Data.Map.filter Użycie konstrukcji: import qualified Data.Map as M daje możliwość skrócenia zapisu do: M.filter

Haskell Moduły Przydatne moduły: Data.List operacje na listach Data.Char operacje na znakach Data.Map operacje na tablicach asocjacyjnych Data.Set operacje na zbiorach

Haskell Moduły - Pomoc Aby wyświetlić listę funkcji eksportowanych przez moduł: Prelude> :browse Data.List Można również zastosować: Prelude> :m +Data.List Prelude Data.List> Data.List.<TAB> Display all 112 possibilities? (y or n) Data.List.!! Data.List.mapAccumR Data.List.++ Data.List.maximum Data.List.\\ Data.List.maximumBy Data.List.foldr1 Data.List.tails Data.List.genericDrop Data.List.take Data.List.genericIndex Data.List.takeWhile

Haskell Moduł Data.List Przykładowe funkcje; transpose transpozycja listy list ghci > transpose [[1,2,3],[4,5,6], [7,8,9]] [[1,4,7],[2,5,8],[3,6,9]] ghci > transpose ["hey","there","guys"] ["htg","ehu","yey","rs","e"]

Haskell Moduł Data.List concat zamiany listy list na listę ghci > concat ["foo","bar","car"] "foobarcar" ghci > concat [[3,4,5],[2,3,4], [2,1,1]] [3,4,5,2,3,4,2,1,1]

Haskell Moduł Data.List and przyjmuje listę wartości logicznych jako argument i zwraca True jeśli wszystkie wartości na liście mają wartość True ghci > and $ map (>4) [5,6,7,8] True ghci > and $ map (==4) [4,4,4,3,4] False Podobnie działa or.

Haskell Moduł Data.List Zamiast or i and w połączniu z map można użyć odpowiednio any i all: ghci > any (==4) [2,3,5,6,1,4] True ghci > all (>4) [6,9,10] True ghci > all (`elem ` ['A'..'Z']) "HEYGUYSwhatsup" False ghci > any (`elem ` ['A'..'Z']) "HEYGUYSwhatsup" True

Haskell Moduł Data.List iterate przyjmuje jako argument funkcję i wartość startową a następnie przykłada funkcję do wartości startowej po czym do wyniku przykłada funkcję, po czym do wyniku przykłada funkcję itd. Wszystkie wyniki zwraca jako listę nieskończoną: ghci > take 10 $ iterate (*2) 1 [1,2,4,8,16,32,64,128,256,512] ghci > take 3 $ iterate (++ "haha") "haha" ["haha","hahahaha","hahahahahaha"]

Haskell Moduł Data.List sort sortuje listę elementów typeclass Ord: ghci > sort [8,5,3,2,1,6,4,2] [1,2,2,3,4,5,6,8] ghci > sort "This will be sorted soon" " Tbdeehiillnooorssstw"

Haskell Moduł Data.List words dzieli linię tekstu na słowa a unwords tworzy linię tekstu z listy słów: ghci > words "hey these are the words in this sentence" ["hey","these","are","the","words","in","this","sentenc e"] ghci > words "hey these are the words in this\nsentence" ["hey","these","are","the","words","in","this","sentenc e"] ghci > unwords ["hey","there","mate"] "hey there mate"

Haskell Moduł Data.List nub usuwa z listy duplikaty elementów listy: ghci > nub [1,2,3,4,3,2,1,2,3,4,3,2,1] [1,2,3,4] ghci > nub "Lots of words and stuff" "Lots fwrdanu"

Haskell Moduł Data.Char Moduł Data.Char zawiera funkcje do operowania na pojedynczych znakach np.: IsAlphaNum zwraca True jeśli argument jest znakiem alfanumerycznym lub False w przeciwnym przypadku: ghci > all isalphanum "bobby283" True ghci > all isalphanum "eddy the fish!" False

Haskell Moduł Data.Char Data.Char dostarcza m.in. funkcje toupper i tolower a także digittoint i inttodigit: ghci > map digittoint "34538" [3,4,5,3,8] ghci > map digittoint "FF85AB" [15,15,8,5,10,11] ghci > inttodigit 15 'f' ghci > inttodigit 5 '5'

Haskell Moduł Data.Map Moduł Data.Map dostarcza funkcji do przeprowadzania operacji na tablicach asocjacyjnych. Tablice asocjacyjne mogą być reprezentowane jako lista krotek: phonebook = [("betty","555 2938"),("bonnie","452 2928"),("patsy","493 2928"),("lucille","205 2928"),("wendy","939 8282"),("penny","853 2492") ]

Haskell Moduł Data.Map W module Data.Map używany jest typ Map. Zmienne tego typu można utworzyć np.: Prelude M> let lista = M.fromList [("Zed", 10), ("Ted", 5)] Prelude M> :t lista lista :: M.Map [Char] Integer

Haskell Moduł Data.Map empty zwraca pustą mapę insert przyjmuje jako parametr klucz, wartość i mapę i zwraca nową mapę z wstawionym kluczem i wartością: ghci > Map.empty fromlist [] ghci > Map.insert 3 100 Map.empty fromlist [(3,100)]

Haskell Moduł Data.Map lookup przyjmuje jako argument klucz i listę i zwraca Just wartość jeżeli dla klucza istnieje wartość lub Nothing jeżeli nie znajdzie klucza. Prelude M> M.lookup "Ted" lista Just 5 member jako argumenty przyjmuje klucz i mapę i zwraca informację czy dla klucza istnieje wartość: ghci > Map.member 3 $ Map.fromList [(3,6),(4,3),(6,9)] True ghci > Map.member 3 $ Map.fromList [(2,5),(4,5)] False

Haskell Moduł Data.Set Moduł Data.Set oferuje operacje na zbiorach. Zbiory podobnie jak mapy tworzone są z list np.: Prelude> import qualified Data.Set as Set Prelude Set> let seta = Set.fromList [ 1, 2, 3] Prelude Set> let setb = Set.fromList [ 3, 4, 5] Prelude Set> :t seta seta :: Set.Set Integer

Haskell Moduł Data.Set Na zbiorach możliwe są typowe dla zbiorów operacje jak intersection, difference: Prelude Set> Set.intersection seta setb fromlist [3] Prelude Set> Set.difference seta setb FromList [1,2] Prelude Set> Set.union seta setb fromlist [1,2,3,4,5]

Haskell Moduły Tworzenie Aby utworzyć własny moduł np. zawierajacy funkcje zwiazane z geometrią należy utworzyć plik.hs (np.: Geometry.hs) zawierający nagłowek opisujący jakie funkcje moduł eksportuje (udostępnia): module Geometry ( spherevolume, spherearea, cubevolume ) where

Haskell Moduły Tworzenie Po czym następują definicje funkcji np.: spherevolume :: Float > Float spherevolume radius = (4.0 / 3.0) * pi * (radius ^ 3) spherearea :: Float > Float spherearea radius = 4 * pi * (radius ^ 2)

Haskell Moduły Tworzenie Własnego modułu można użyć tak jak modułów dostarczanych standardowo: ghci> import Geometry

Haskell Moduły Tworzenie Moduły mogą być tworzone jako konstrukcje hierarchiczne. Każdy moduł może zawierać podmoduły. Moduł Geometry może zostać przedstawiony jako zawierający podmoduły dla różnych rodzajów obiektów. Należy utworzyć katalog Geometry zawierający pliki sphere.hs, cuboid.hs and cube.hs.

Haskell Moduły Tworzenie sphere.hs module Geometry.Sphere ( volume, area ) where volume :: Float > Float volume radius = (4.0 / 3.0) * pi * (radius ^ 3) area :: Float > Float area radius = 4 * pi * (radius ^ 2)

Haskell Moduły Tworzenie cuboid.hs module Geometry.Cuboid ( volume, area ) where volume :: Float > Float > Float > Float volume a b c = rectanglearea a b * c area :: Float > Float > Float > Float area a b c = rectanglearea a b * 2 + rectanglearea a c * 2 + rectanglearea c b * 2 rectanglearea :: Float > Float > Float rectanglearea a b = a * b

Haskell Moduły Tworzenie cube.hs module Geometry.Cube ( volume, area ) where import qualified Geometry.Cuboid as Cuboid volume :: Float > Float volume side = Cuboid.volume side side side area :: Float > Float area side = Cuboid.area side side side

Haskell Moduły Tworzenie Użycie takiego modułu: import Geometry.Sphere Teraz można użyć area i volume do wyliczenia pola i objętości kuli. Można również wykonać: import qualified Geometry.Sphere as Sphere import qualified Geometry.Cuboid as Cuboid import qualified Geometry.Cube as Cube Można wtedy wywołać: Sphere.area, Sphere.volume itd. do obliczenia pola powierzchni i objętości odpowiednich obiektów.