Programmeren met Algebra

18
Programmeren met Algebra André van Delft 6 februari 2012 Presentatie op Grotius College Delft

description

Programmeren met Algebra. André van Delft 6 februari 2012 Presentatie op Grotius College Delft. CV. 1979-1985Studie Wiskunde in Leiden 1982-1985Studie Bedrijfskunde in Delft/Rotterdam 1985-1989Promotieplaats Informatica in Leiden 1989-2006 Software-ontwikkelaar op contractbasis - PowerPoint PPT Presentation

Transcript of Programmeren met Algebra

Page 1: Programmeren met Algebra

Programmeren met Algebra

André van Delft6 februari 2012

Presentatie op Grotius College Delft

Page 2: Programmeren met Algebra

CV• 1979-1985 Studie Wiskunde in Leiden• 1982-1985 Studie Bedrijfskunde in Delft/Rotterdam• 1985-1989 Promotieplaats Informatica in Leiden• 1989-2006 Software-ontwikkelaar op contractbasis• 2006-2012 Wetenschapper bij NATO/NC3A

• Onderzoek & Ontwikkeling van Programmeertalen– Parallelisme– Grootheden & Eenheden– Rare talen

Page 3: Programmeren met Algebra

Alan Kay

Page 4: Programmeren met Algebra

Programmeren moeilijk sinds 1995• Meerdere taken tegelijk: threading

– Hoofdtaak Main thread– Langdurige taken Background thread– Schermafhandeling GUI thread

• Gebeurtenissen (event handling) & communicatie – Toetsenbord, muis, touch screen– GPS, sensoren– Internet, Bluetooth

• Programmeertalen: C C++Java, C# Scala Geen oplossing…

Page 5: Programmeren met Algebra

GUI-applicatie - 1

• Invoerveld• Zoekknop• Zoeken…• Resultaten

Page 6: Programmeren met Algebra

GUI-applicatie - 2

val searchButton = new Button("Go”) { reactions.+= { case ButtonClicked(b) => enabled = false outputTA.text = "Starting search...” new Thread(new Runnable { def run() { Thread.sleep(3000) SwingUtilities.invokeLater(new Runnable{ def run() {outputTA.text="Search ready” enabled = true }}) }}).start }}

Page 7: Programmeren met Algebra

GUI-applicatie - 3

live = searchSequence...

searchSequence = searchCommand showSearchingText searchInDatabase showSearchResults

searchCommand = searchButtonshowSearchingText = @gui: {outputTA.text = "…"}showSearchResults = @gui: {outputTA.text = "…"}searchInDatabase = {* Thread.sleep(3000) *}

Page 8: Programmeren met Algebra

GUI-applicatie - 4

• Zoeken: knop of Enter-toets• Afbreken: knop of Escape-toets• Exit: knop of ; daarna: “Are you sure?”…• Alleen zoeken als tekstveld gevuld is• Voortgang tonen

Page 9: Programmeren met Algebra

GUI-applicatie - 5

searchGuard = if(!searchTF.text.isEmpty) . anyEvent(comp)  ...

searchInDatabase = {*Thread.sleep(3000)*} || progressMonitorprogressMonitor = {*Thread.sleep( 250)*} @gui:{searchTF.text+=here.pass} ...

live = searchSequence... || exit

searchCommand = searchButton + Key.EntercancelCommand = cancelButton + Key.Escape

exitCommand = exitButton + windowClosing

exit = exitCommand @gui: while(!areYouSure)cancelSearch = cancelCommand @gui: showCanceledText

searchSequence = searchGuard searchCommand; showSearchingText searchInDatabase showSearchResults / cancelSearch

Page 10: Programmeren met Algebra

Process AlgebraWiskundige theorie over processenBergstra&Klop, Amsterdam, 1982

x y = x y + y x + x|y

x+y = y+x (x+y)+z = x+(y+z) x+x = x (x+y)·z = x·z+y·z (x·y)·z = x·(y·z)

O+x = x O·x = O 1·x = x x·1 = x

δ+x = x δ·x = δ ε·x = x x·ε = x (x+ε)·y = x·y + ε·y

= x·y + y

Page 11: Programmeren met Algebra

Werking: Templates & Call Graphs

{Hello}+ε; {World}

(x+ε)·y = x·y + ε·y

= x·y + y

Page 12: Programmeren met Algebra

Slot

• Eenvoudig en efficiënt • Nu 2000 regels Scala• Nog veel te doen en te ontdekken• Open Source:

http://code.google.com/p/subscript/• www.rosettacode.org …

Page 13: Programmeren met Algebra
Page 14: Programmeren met Algebra
Page 15: Programmeren met Algebra

Hello Worldhttp://rosettacode.org/wiki/Hello_world/Text

C: #include <stdio.h>

int main(void){ printf(”Hello, World!\n”); return 0;}

HQ9+: H

C0H:

C1R: Hello_world/Text

Page 16: Programmeren met Algebra

100 Doors http://rosettacode.org/wiki/100_doors

C: #include <stdio.h> 

int main(){ int door, square, increment; for (door = 1, square = 1, increment = 1; door <= 100;

door++ == square && (square += increment += 2))

printf("door #%d is %s.\n", door, (door == square? "open" : "closed"));

return 0;}

C1R: 100_doors

Stupid• This means that nearly every C1R "solution" in Rosetta is simply a heading,

followed by string which gives the path name to the C solution. This is a form of redundancy that is effectively spam.

• David St. Hubbins: It's such a fine line between stupid, and uh...• Nigel Tufnel: Clever.• David St. Hubbins: Yeah, and clever.

Page 17: Programmeren met Algebra

Zeef van Eratosthenes - 1

Page 18: Programmeren met Algebra

Zeef van Eratosthenes - 2main = generator(2,1000000) ==> (..==>sieve) =={toPrint}==> printer

generator(s,e) = for(i<-s to e) <=i sieve = =>p:Int? @toPrint:<=p; ..=>i:Int? if (i%p!=0) <=i

printer = ..=>i:Int? println,i

<==>(i:Int) = {}