Programske paradigme Funkcionalna paradigma

Similar documents
PROGRAMMING IN HASKELL. Chapter 2 - First Steps

Programiranje III razred

PROGRAMMING IN HASKELL. Chapter 2 - First Steps

Svi Java tipovi imaju ekvivalentan tip u jeziku Scala Većina Scala koda se direktno preslikava u odgovarajući Java konstrukt

pojedinačnom elementu niza se pristupa imeniza[indeks] indeks od 0 do n-1

Osnove programskog jezika C# Čas 5. Delegati, događaji i interfejsi

Uputa: Zabranjeno je koristiti bilo kakva pomagala. Rje²enja pi²ete desno od zadatka. Predajete samo ovaj list.

Vežbe - XII nedelja PHP Doc

VHDLPrimeri Poglavlje5.doc

Programiranje III razred

... ; ako je a n parno. ; ako je a n neparno

/*#include <iostream> // Prvi zadatak sa integralnomg ispita

Uputstvo za korišćenje logrotate funkcije

PREDMET. Osnove Java Programiranja. Čas JAVADOC

Osnove programskog jezika C# Čas 4. Nasledjivanje 2. deo

namespace spojneice { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

PROGRAMMING IN HASKELL. Chapter 2 - First Steps

VRIJEDNOSTI ATRIBUTA

Uvod u programiranje - vežbe. Kontrola toka izvršavanja programa

x y = z Zadaci - procedure

PARALELNO PROGRAMIRANJE

Učitati cio broj n i štampati njegovu recipročnu vrijednost. Ako je učitan broj 0, štampati 1/0.

Prirodno-matematički fakultet u Nišu Departman za fiziku. dr Dejan S. Aleksić Programiranje u fizici

Programiranje Programski jezik C. Sadržaj. Datoteke. prof.dr.sc. Ivo Ipšić 2009/2010

UNIVERZITET U BEOGRADU ELEKTROTEHNIČKI FAKULTET

Haskell Types, Classes, and Functions, Currying, and Polymorphism

CSS CSS. selector { property: value; } 3/20/2018. CSS: Cascading Style Sheets

Osnovne strukture podataka

var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin ListBox1.Items.LoadFromFile('d:\brojevi.

Tema 8: Koncepti i teorije relevantne za donošenje odluka (VEŽBE)

PROGRAMMING IN HASKELL. CS Chapter 6 - Recursive Functions

b) program deljiv3; uses wincrt; var i:integer; begin i:=3; while i<100 do begin write(i:5); i:=i+3; end; end.

Sberbank Business Online na Mozilla FireFox

f2() f6() main() f3() f7() f4()

Uvod u relacione baze podataka

Računarske osnove Interneta (SI3ROI, IR4ROI)

Informatics 1 Functional Programming Lecture 7. Map, filter, fold. Don Sannella University of Edinburgh

Ovde će se raditi na funkcijama konverzija: konverzija tipa datuma u znak tip i obrnuto, konverzija broja u karakter tip i obrnuto

Functional Programming in Haskell Part I : Basics

PVC Eco. Eco Prozori i Balkonska Vrata Bela Boja Dezeni drveta su 40% skuplji

Haskell through HUGS THE BASICS

operativni sistem part 2

VB komande. Programiranje 1

Veliki računski zadaci mogu se razbiti u manje delove i time se omogućava ljudima da iskoriste ono što su neki drugi već uradili, umesto da počinju

Jezik Baze Podataka SQL. Jennifer Widom

For. 1) program ispis; {ispisuje brojeve od 1 do 5 jedan ispod drugog} uses wincrt; var s,i:integer; begin for i:=1 to 5do writeln(i); end.

NIZOVI.

Vidljivost TipPovratneVrednosti ImeFunkcije (NizParametara) { TeloFunkcije }

Haskell Scripts. Yan Huang

Solution sheet 1. Introduction. Exercise 1 - Types of values. Exercise 2 - Constructors

PITANJA ZA II KOLOKVIJUM NASLJEĐIVANJE, VIRTUELNE FUNKCIJE I POLIMORFIZAM

PRINCIPI SOFTVERSKOG INŽENJERSTVA TIM NAZIV_TIMA

Mašinska vizija. Dr Nenad Jovičić tnt.etf.rs/~mv

INTRODUCTION TO FUNCTIONAL PROGRAMMING

Numeričke metode i praktikum

2. Linijska algoritamska struktura

Izrada VI laboratorijske vježbe

Windows Server 2012, VDI Licenciranje najprodavanijeg servera, što je novo, VDI licenciranje. Office 2013 / Office 365

Algoritmi i strukture podataka 2. Čas, Uvod u C++

Programiranje 2. Odsek za Softversko inženjerstvo. Elektrotehnički fakultet Beograd

CSCE 314 Programming Languages

PHP? PHP (recursive acronym "PHP: Hypertext Preprocessor") Open Source general-purpose scripting language Web development

24/03/2018. Deklaracija promenljivih. Inicijalizacija promenljivih. Deklaracija i inicijalizacija promenljivih

CREATE DATABASE naziv-baze-podataka [IN naziv-dbspace]

PROGRAMIRANJE. Amir Hajdar

PROGRAMIRANJE INTERNET APLIKACIJA

CSc 372. Comparative Programming Languages. 4 : Haskell Basics. Department of Computer Science University of Arizona

RAČUNARSKI PRAKTIKUM II

Informacioni sistemi i baze podataka

PVC Eco. Eco Prozori i Balkonska Vrata Bela Boja Dezeni drveta su 40% skuplji

CSc 372 Comparative Programming Languages. 4 : Haskell Basics

GUI - događaji (Events) i izuzeci. Bojan Tomić

PITANJA ZA II KOLOKVIJUM KLASE I OBJEKTI

A general introduction to Functional Programming using Haskell

Oracle Proprietary Joins Za upite nad više od jedne tabele korišćenjem Oracle proprietary sintakse koristiti join uslov u WHERE izrazu:

Aktuelna verzija Matlaba je 7, koja ima dosta poboljšanja u odnosu na prethodne.

Dežurni nastavnik: Kolokvijum traje 1.5 sat, prvih sat vremena nije dozvoljeno napuštanje kolokvijuma. Upotreba literature nije dozvoljena.

I PISMENI ZADATAK III6 I GRUPA IME I PREZIME

Nizovi. Programiranje 1

12. Uskladištene procedure (Stored Procedures)

Sveučilište u Zagrebu PMF Matematički odsjek. Mreže računala. Vježbe 08. Zvonimir Bujanović Slaven Kožić Vinko Petričević

Binarne hrpe. Strukture podataka i algoritmi VJEŽBE 26. siječnja / 133

CSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Basics

Informatika Uvod u C#,.NET Framework i Visual Studio... nastavak...

Definicije kolona su odvojene zarezima CREATE TABLE Example Sledeći primer poklazuje CREATE TABLE iskaz:

Numerical Computation

Variable Neighborhood Descent - VND (Metoda promenljivog spusta)

The List Datatype. CSc 372. Comparative Programming Languages. 6 : Haskell Lists. Department of Computer Science University of Arizona

Watch out for the arrows. Recollecting Haskell, Part V. A start on higher types: Mapping, 1. A start on higher types: Mapping, 2.

It is better to have 100 functions operate one one data structure, than 10 functions on 10 data structures. A. Perlis

Uputstva za instaliranje čitača Datalogic Skorpio u operativnom sistemu Windows 7 i višim POM-NA-XX-46, V3.0

BAZE PODATAKA. SQL Opis podataka. Neđeljko Lekić Irena Orović

JavaScript i HTML DOM

Programiranje 1 Programski jezik C 2. čas. Mirko Spasić

PROGRAMIRANJE. Teme. Packages Reference objekata Inheritance nasljeđivanje Exceptions. Amir Hajdar

Višestruko nasleđivanje nije moguće u jeziku Scala

Programiranje 1. Školska 2006/2007 godina. Matematički fakultet, Beograd

Shell CSCE 314 TAMU. Functions continued

PROGRAMING LANGUAGE Alaska Xbase++ and express++ and other Tools

Introduction to Programming, Aug-Dec 2006

Transcription:

Programske paradigme Funkcionalna paradigma 1. čas: Uvod u funkcionalno programiranje. Programski jezik Haskel. Upoznavanje sa razvojnim okruženjem. Tipovi podataka.

Funkcionalno programiranje Stil u programiranju u kom je osnovni metod izračunavanja primena funkcija na argumente

Pojam funkcije U Haskell-u, funkcija je preslikavanje koje uzima jedan ili više argumenata i vraća rezultat double x = x+x

Primer Suma celih brojeva u Javi: total=0; for(i=1;i<=10;i++) total+=i; Metod izračunavanja je dodela vrednosti promenljivim.

Primer Suma celih brojeva u Haskelu: sum[1..10] Metod izračunavanja je primena funkcija.

Funkcija sum iz prethodnog primera u Haskelu se može ovako implementirati: sum[] = 0 sum(x:xs) = x + sum xs

Još jedan primer funkcije u Haskelu qsort [ ] = [ ] qsort (x : xs) = qsort smaller ++ [x] ++ qsort larger where smaller = [a a xs, a x ] larger = [b b xs, b > x ]

Zadaci za vežbu Definisati funkciju product koja vraća proizvod liste brojeva. Kako treba izmeniti funkciju qsort da bi sortirala listu opadajuće? Šta bi se u funkciji qsort promenilo ako bismo znak zamenili sa <? Razmatrati na primeru qsort[2,2,3,1,1].

Sistem Hugs Hugs predstavlja implementaciju standarda Haskel 98 Hugs je interpreter i najčešće je korišćen u radu sa Haskelom; pored njega, postoje i drugi sistemi kao što su kompajleri GHC, nhc98, UHC, Yhc, jhc, lhc Hugs se može preuzeti sa www.haskell.org/hugs

Startovanje Hugs-a Hugs 98: Based on the Haskell 98 standard Copyright (c) 1994-2005 --- World Wide Web: http://haskell.org/hugs Bugs: http://hackage.haskell.org/trac/hugs Version: Sep 2006 Haskell 98 mode: Restart with command line option -98 to enable extensions Type :? for help Hugs>2+3*4 14

Standardna biblioteka funkcija Biblioteka Prelude.hs obezbeđuje veliki broj standardnih funkcija. Pored osnovnih računskih operacija, ugrađene su i razne funkcije za rad sa listama: >head[1,2,3,4,5] 1

>tail[1,2,3,4,5] [2,3,4,5] >[1,2,3,4,5]!!2 3 >take 3 [1,2,3,4,5] [1,2,3]

>drop 3 [1,2,3,4,5] [4,5] >length[1,2,3,4,5] 5 >sum[1,2,3,4,5] 15

>product [1,2,3,4,5] 120 >[1,2,3]++[4,5] [1,2,3,4,5] >reverse[1,2,3,4,5] [5,4,3,2,1]

Primena funkcija primeni funkciju f na argumente a i b i rezultatu dodaj proizvod brojeva c i d Matematička notacija: f(a,b) + c d Haskelova notacija: f a b + c*d

Haskel skriptovi U okviru Haskel skriptova pišemo sopstvene funkcije Po konvenciji, Haskel skriptovi imaju ekstenziju.hs

primer1.hs size :: Int size = 12+13 double :: Int -> Int double n = 2*n square :: Int -> Int square n = n*n test :: Int test = double 320 - square (size - double 6)

Neke Hugs komande Komanda :? daje spisak svih Hugs komandi

Konvencije za imenovanje promenljivih Imena funkcija i argumenata počinju malim slovom, npr: myfun, fun1, arg_2, x Imena lista završavaju se sufiksom s, npr: xs, ns, nss

Struktuiranje koda u Haskelu. Pravilo grupisanja (layout rule)

Uz ovakvo zapisivanje, nema potrebe za zagradama koje bi ukazivale na grupisanje definicija a = b + c where b = 1 c = 2 d = a * 2 znači a = b + c where {b = 1; c = 2} d = a * 2 implicitno grupisanje eksplicitno grupisanje

Zadaci Ispraviti greške u navedenom skriptu pa ga pokrenuti u Hugs-u.

Zadaci Pokazati kako se funkcija standardne biblioteke last koja izdvaja poslednji element neprazne liste može definisati preko standardnih funkcija za rad sa listama. Pokazati kako se funkcija standardne biblioteke init koja uklanja poslednji element neprazne liste može slično definisati preko standardnih funkcija za rad sa listama.

Tipovi podataka. Osnovni tipovi. Bool Char String Int celi brojevi fiksne preciznosti Integer celi brojevi proizvoljne preciznosti Float realni brojevi jednostruke preciznosti u pokretnom zarezu

Svaki dobro definisan izraz u Haskelu ima svoj tip i on se određuje pre izračunavanja funkcije. Ukoliko za dati izraz ne može da se odredi tip, onda izraz nije validan

Liste Lista je niz vrednosti istog tipa: [False, True, False] :: [Bool] [ a, b, c, d, e ] :: [Char] Lista se može sastojati i od drugih listi Lista ne mora biti konačna

Torke Torka je niz vrednosti koje mogu biti različitog tipa: (False, True) :: (Bool, Bool) (False, a, True) :: (Bool, Char, Bool) Izraz (t1,t2,...,tn) je tipa n-torke čija i-ta komponenta ima tip ti za svako i od 1 do n

Veličina torke se vidi iz njenog tipa, za razliku od lista Kod torke, svaka komponenta može biti bilo kog tipa ( a, (False, b )) (True, [ a, b ])

Tipovi funkcija Funkcija je preslikavanje vrednosti jednog tipa u vrednosti drugog tipa not :: Bool->Bool isdigit :: Char -> Bool t1->t2 je tip funkcije koja preslikava vrednosti tipa t1 u vrednosti tipa t2

Zadaci Odrediti tipove sledećih vrednosti: [ a, b, c ] ( a, b, c ) [(False, O ), (True, 1 )] ([False,True ], [ 0, 1 ]) [tail, init, reverse ] Odrediti tipove sledećih funkcija: second xs = head (tail xs) swap (x, y) = (y, x ) pair x y = (x, y)