Tillämpad programmering

Relevanta dokument
Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-12:00

Programmering II (ID1019) :00-17:00

Programmering II (ID1019) :00-12:00

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Sökning och sortering

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

Rekursiva algoritmer sortering sökning mönstermatchning

Föreläsning Datastrukturer (DAT036)

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Programmering II (ID1019) :00-11:00

Programmering II (ID1019)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning Datastrukturer (DAT036)

Programmering II (ID1019) :00-11:00

TDIU01 - Programmering i C++, grundkurs

Programmering II (ID1019) :00-13: hp

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Dugga Datastrukturer (DAT036)

Föreläsning 9 Exempel

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsning 9 Datastrukturer (DAT037)

Dagens föreläsning Programmering i Lisp Fö 5

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Exempeltenta GruDat 2002/2003

TDDE44 Programmering, grundkurs

Omtentamen: Tillämpad Programmering (ID1218) :00-13:00

Tillämpad Programmering (ID1218) :00-13:00

Tillämpad programmering

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

TDIU01 Programmering i C++

Kungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Programmering II (ID1019) :00-12:00

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 3 Datastrukturer (DAT037)

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

Funktionell programmering DD1361

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

TDDC74 Lab 02 Listor, sammansatta strukturer

Tentamen i. TDDC67 Funktionell programmering och Lisp

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Övning 1 - Abstrakta datatyper

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 036/DIT960

Tentamen Datastrukturer (DAT036)

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

Föreläsning Datastrukturer (DAT036)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Föreläsning 7. Träd och binära sökträd

Datalogi, grundkurs 1. Lösningsförslag till tentamen

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Programmering II (ID1019) :00-12:00

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Tillämpad Programmering (ID1218) :00-12:00

Länkade strukturer, parametriserade typer och undantag

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Objektsamlingar i Java

Föreläsning Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

Föreläsning Datastrukturer (DAT036)

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

Lösningsförslag till exempeltenta 1

Datastrukturer i Haskell

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Data- och programstrukturer

Sätt att skriva ut binärträd

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Lösningsförslag för tentamen i Datastrukturer (DAT036) från

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Datastrukturer och algoritmer

Del : Paradigmer allmänt.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Centrala begrepp i prolog och logikprogrammering. Annamaris lista

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

Föreläsning Datastrukturer (DAT036)

Grundläggande Datalogi

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Tentamen (del 2) (4 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Programmering för språkteknologer II, HT2011. Rum

Transkript:

Tillämpad programmering Erlang II Johan Montelius 1

Datastrukturer literaler atomer: foo, gurka, 'ett o två' nummer: 1,2,.. 3.14... samansatta (compound) tupler: {foo, a, b, 2} cons-cell: [gurka tomat ] 2

Tupler {A, 42, C} = {3, 42, gurka} {A = 3, C = gurka } {A, 25, C} = {13, 23, 33} bad match {A, 23, A} = {13, 23, 33} bad match 3

cons-celler [H T] = [a,b,c,d] {H = a, T = [b,c,d] } [X, Y T] = [1,2,3,4,5] {X = 1, Y = 2, T = [3, 4, 5] } [H T] = [foo] {H = foo, T = [] } 4

vad är en lista? En lista är antingen: en tom lista (nil) eller, en cons-cell där svansen är en lista. [] [1,2,3] [1 [2,3]] [1 X] 5

proper/1 - är det en riktig lista -spec proper([any()]) -> bool. proper(l) -> case L of [] ->...; [_ T] ->...; _ -> false end. 6

proper/1 - är det en riktig lista -spec proper([any()]) -> bool. proper(l) -> case L of [] -> true; [_ T] -> dont_know; _ -> false end. 7

proper/1 - är det en riktig lista -spec proper([any()]) -> bool. proper(l) -> case L of [] -> true; [_ T] -> magic(t); _ -> false end. 8

proper/1 - är det en riktig lista -spec proper([any()]) -> bool. proper(l) -> case L of [] -> true; [_ T] -> proper(t); _ -> false end. 9

append/2 - en lista av två -spec append([_], [_]) -> [_]. append(xs, Ys) -> case Xs of [] ->...; [H T] -> [ H... ] end. 10

member/2 - finns i listan -spec member(_, [_]) -> bool. member(x, L) -> case L of [] ->...; [X _] ->...; [_ T] ->... end. 11

length/1 - längden av en lista length(l) -> case L of [] ->...; [_ T] ->... end. 12

hmmm... length([1,2,3,4]) 1 + length([2,3,4]) 1 + length([3,4]) 1 + length([4]) 1 + length([]) 0 1 2 3 4 13

length/2 - svansrekursiv length(l) -> length(l,0). length(l, S) -> case L of [] -> S; [_ T] -> S1 = S + 1, length(t, S1) end. 14

ingen stack! length([1,2,3,4]) length([1,2,3,4], 0) length([2,3,4], 1) length([3,4], 2) length([4], 3) length([], 4) 4 15

trädstrukturer nil {node, Val, Left, Right} b {node, b, {node, a, nil, nil}, {node, d, {node, c, nil, nil}, nil}} a c d 16

is_tree/1 - är det ett träd? is_tree(tree) -> case Tree of nil ->...; {node, _, Left, Right} ->... and...; _ -> false end. 17

insert/3 - lägg in i träd insert(val, nil) -> {node, Val, nil,nil}; insert(val, {node, V, L, R}) when Val < V -> Inserted = insert(val, L), {node, V, Inserted, R}; insert(val, {node, V, L, R}) when Val >= V -> Inserted = insert(val,r), {node, V, L, Inserted}. 18

same-same-but-different insert(val, Tree) -> case Tree of nil -> {node, Val, nil,nil}; {node, V, L, R} -> if Val < V -> Inserted = insert(val, L), {node, V, Inserted, R}; Val >= V -> Inserted = insert(val, L), {node, V, L, Inserted} end end. 19

member/2 member(val, nil) -> false; member(val, {node, Val, _, _}) -> true; member(val, {node, V, L, _}) when Val < V -> member(val, L); member(val, {node, V, _, R}) when Val > V -> member(val, R); 20

key-value store (som lista) [] [{Key, Val},..] [{foo, 13}, {bar, 42}] 21

key-value store new() -> Store is_store(store) -> bool add(key, Value, Store) -> Store lookup(key, Store) -> {ok, Value}, fail delete(key, Stor) -> Store 22

-module(store) -module(store). -export([new/0, is_store/1, add/3, lookup/2, delete/2]). 23

-module(store) -type store() :: [{atom(), any()}]. -spec new() -> store(). -spec is_store(any()). -spec add(atom(), any(), store()) -> store(). -spec lookup(atom(), store()) -> {ok, any()} fail. -spec delete(atom(), store()) -> store(). 24

new/0 add/3 new() ->??. add(key, Value, Store) ->??. 25

is_store/1 is_store([]) -> true; is_store([{key,_} Rest]) when is_atom(key) -> is_store(rest); is_store(_) -> false. 26

lookup/3 lookup(_, []) -> fail; lookup(key, [{Key, Val} _]) -> {ok, Val}; lookup(key, [_ Rest]) -> lookup(key, Rest). 27

delete/2 delete(_, []) -> []; delete(key, [{Key, _} Rest]) -> Rest; delete(key, [Elem Rest]) ->.... 28

modulen - abstraktion test() -> S0 = store:new(), S1 = store:add(foo, 13, S0), S2 = store:add(bar, 12, S1), S3 = store:delete(foo, S2), store:lookup(bar, S3). 29

key-value store (som ordnat träd) nil {node, Key, Value, Left, Right} {node, foo, 14, {node, bar, 12, nil, nil}, {node, zot, 34, nil, nil}} 30

add/3 add(key, Val, nil) -> {node, Key, Val, nil, nil}. add(key, Val, {node,k,v,l,r}) when Key =< K -> Added = add(key, Val, L), {node, K, V, Added, R}; add(key, Val, {node,k,v,l,r}) when Key > K -> Added = add(key, Val, R), {node, K, V, L, Added}. 31

lookup/2 lookup(key, nil) ->...; lookup(key,{node,key,val,_,_}) ->...; lookup(key,{node,k,_,l,_}) when Key < K ->...; lookup(key,{node,k,_,_,r}) when Key > K ->... 32

delete/2 delete(_, nil) ->...; delete(key,{node,key,_,l,nil}) ->...; delete(key,{node,key,_,nil,r}) ->...; delete(key,{node,k,v,l,r}) when Key < K -> Deleted =......; delete(key,{node,k,v,l,r}) when Key > K -> Deleted =......; 33

delete/2 delete(key,{node,key,_,l,r}) -> {Leftmost, Value} = leftmost(r), Removed =..., {node,..,..,..,..} 34

letmost/2 leftmost({node, Kel, Val, nil, _}) ->...; leftmost({node,key,val,l,_}) -> leftmost(...). 35

beskriv ett kort {card, Suit, Value} suit = (heart, club, spade, diamond) value = (ace, king, queen, knight, 10,... 2) {card, heart, king} {card, club, 10} {card, spade, 2} 36

jämföra färg -module(suite). -export([gr/2]). gr(heart, Suite) -> Suite =/= heart; gr(dimond, Suite) -> Suit == club or Suite == spade; gr(club, Suite) -> Suite == spade; gr(spade, _) -> false. 37

jämföra valör -module(value). -export([gr/2]). gr(ace, Value) -> Value =/= ace; gr(king, Value) -> (Value == queen) or gr(queen, Value); gr(queen, Value) -> (Value == knight) or gr(knight, Value); gr(knight, Value) -> is_integer(value); gr(value1, Value2) -> is_integer(value1) and is_integer(value2) and Value1 > Value2. 38

jämföra kort -module(card). gr({card, Suit, Val1}, {card, Suit, Val2}) -> value:gr(val1, Val2). gr({card, Suit1, _},{card, Suit2, _}) -> suit:gr(suit1, Suit2); card:gr({card, heart,5},{card, spade, 2}). 39

sortera kort sort([]) -> []; sort([card Rest]) -> {Low, High} = split(card, Rest), Sorted_low = sort(low), Sorted_high = sort(high), append(sorted_low, [Card Sorted_high]). 40

sortera kort split(_, []) -> []; split(card, [First Rest]) -> case card_gr(card, First) of true -> {Low, High} = split(card, Rest}, {[First Low], High}; false -> {Low, High} = split(card, Rest}, {Low, [First High]} end. 41

sortera kort split(card, Deck) -> split(card, Deck, [], []). split(_, [], Low, High) -> {Low, High}; split(card, [First Rest], Low, High) -> case card_gr(card, First) of true -> split(card, Rest,[First Low],High); false -> split(card, Rest,Low,[First High]) end. 42

modulen som abstraktion Gömmer detaljer i implementationen: abstrakt datatyp De exporterade funktionerna ger API: konstruktorer dekonstruktorer jämföra transformera etc 43