ALP I Turing-Maschine

Ähnliche Dokumente
ALP I Turing-Maschine

Paradigmen der Programmierung

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil III SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zur Übungsklausur -

Programmieren in Haskell Einstieg in Haskell

Programmieren in Haskell

Musterlösung zur 2. Aufgabe der 4. Übung

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 9 -

Einführung in die Informatik 2

ALP I Turing-Maschine

Programmieren in Haskell Programmiermethodik

Einführung in die funktionale Programmierung

Übung zur Vorlesung Berechenbarkeit und Komplexität

Funktionale Programmierung. ALP I Lambda-Kalkül. Teil IVb WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

ALP I. Funktionale Programmierung

Einführung in die Informatik 2

Funktionale Programmierung ALP I. Die Natur rekursiver Funktionen SS Prof. Dr. Margarita Esponda. Prof. Dr.

Gliederung. Algorithmen und Datenstrukturen I. Listen in Haskell: Listen in Haskell: Listen in Haskell. Datentyp Liste Strings Listenkomprehension

[10] Software Transactional Memory in Haskell, Tortenwurf und Aufgabenblatt 7

Kapitel 3: Eine einfache Programmiersprache. Programmieren in Haskell 1

1 - FortProg ist: [ ] objekt-orientiert; [ ] funktional; [ ] logisch; [ ] manchmal nicht auszuhalten

WS 2011/2012. Georg Sauthoff 1. November 11, 2011

2.2.1 Algebraische Spezifikation (Fortsetzung)

Geheimnisprinzip: (information hiding principle, Parnas 1972)

Programmieren in Haskell Abstrakte Datentypen

Funktionale Programmierung

Ströme als unendliche Listen in Haskell

Haskell Seminar Abstrakte Datentypen. Nils Bardenhagen ms2725

Einführung in die Informatik 2 8. Übung

Proseminar: Fortgeschrittene Programmierung 1

Programmieren in Haskell

Funktionale Programmierung ALP I. λ Kalkül. Teil 2 WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Grundlegende Datentypen

Programmieren in Haskell

Was bisher geschah. deklarative Programmierung. funktionale Programmierung (Haskell):

Grundlegende Datentypen

Funktionale Programmierung Grundlegende Datentypen

ALP I. Funktionale Programmierung

Programmieren in Haskell. Abstrakte Datentypen

ProInformatik: Funktionale Programmierung. Punkte

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 8 -

Was bisher geschah Funktionale Programmierung in Haskell: Algebraische Datentypen Pattern Matching Polymorphie Typklassen Rekursive Datentypen:

Tracing Testing Zusammenfassung. Testing und Tracing. Diana Hille. 14. Januar 2008

Haskell in der Schule - (K)ein Thema? Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Programmieren in Haskell

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Dank. Grundlagen der Theoretischen Informatik / Einführung in die Theoretische Informatik I. Akzeptierbarkeit und Entscheidbarkeit. Teil V.

Funktionale Programmierung und Typtheorie

Einführung in die Informatik 2 5. Übung

Typklassen. Natascha Widder

Funktionale Programmierung ALP I. Kombinatorische Logik (CL) SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Grundlagen der Programmierung 2. Unendliche Listen und Ströme(B)

Programmtransformationen und Induktion in funktionalen Programmen

ALP I. Funktionale Programmierung

Funktionale Programmierung

Einführung in Haskell

Tutorium - Haskell in der Schule. Ralf Dorn - Dennis Buchmann - Felix Last - Carl Ambroselli

Funktionale Programmierung. Das Funktionale Quiz. Das Funktionale Quiz. Das Funktionale Quiz

Monaden. 14. Januar 2015

HASKELL KAPITEL 2.1. Notationen: Currying und das Lambda-Kalkül

Programmieren in Haskell

Grundlegende Datentypen

ROHRE FUER HOHE TEMPERATUREN ASTM A 106

INFORMATIK FÜR BIOLOGEN

WS 2011/2012. Georg Sauthoff 1. November 1, 2011

Kapitel 6: Abstraktion. Programmieren in Haskell 1

Prof. Dr. Margarita Esponda

Informatik-Seminar Thema: Monaden (Kapitel 10)

Funktionale Programmierung ALP I. Algebraische Datentypen und Abstrakte Datentypen. SS 2013 Prof. Dr. Margarita Esponda. Prof. Dr.

WS 2011/2012. Robert Giegerich. October 30, 2013

Typ-Polymorphismus. November 12, 2014

Praktische Informatik 3: Funktionale Programmierung Vorlesung 11 vom : Monaden als Berechnungsmuster

Programmieren in Haskell

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

Prüfung Funktionale Programmierung

Tag 7. Pattern Matching und eigene Datentypen

Gliederung. Algorithmen und Datenstrukturen I. Binäre Bäume: ADT Heap. inäre Bäume: ADT Heap. Abstrakte Datentypen IV. D. Rösner

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Haskell for Hackers... or why functional programming matters

9 Algebraische Datentypen

Funktionale Programmierung mit Haskell

Programmieren in Haskell

Einführung in die Informatik 2 5. Übung

Programmieren in Haskell Programmieren mit Listen

Programmieren in Haskell

WS 2011/2012. RobertGiegerich. November 12, 2013

Programmieren in Haskell Das Haskell Typsystem

Programmierkurs II. Typsynonyme & algebraische Datentypen

Informatik A WS 2007/08. Nachklausur

Algorithmen und Programmieren 1 Funktionale Programmierung - Musterlösung zu Übung 4 -

WS 2011/2012. RobertGiegerich. November 12, 2013

1 Einführung. 2 Typ-0- und Typ-1-Sprachen. 3 Berechnungsmodelle. 4 Unentscheidbarkeit. 5 Unentscheidbare Probleme. 6 Komplexitätstheorie

2.3 Spezifikation von Abstrakten Datentypen

WS 2011/2012. Georg Sauthoff November 2011

Grundlagen der Theoretischen Informatik

Prüfung Funktionale Programmierung

Funktionen höherer Ordnung

Praktische Informatik 3: Funktionale Programmierung Vorlesung 3 vom : Algebraische Datentypen

Mehr Listen und noch ein bisschen Arithmetik

5. Januar Universität Bielefeld AG Praktische Informatik. Programmieren in Haskell. Stefan Janssen. Abstrakte Datentypen.

Transkript:

ALP I Turing-Maschine Simulator WS 2012/2013

Haskell-Implementierung eines TM-Simulators module Turing (sim, start) data Move = L R S deriving (Show, Eq) type State = Int type Input = Char type Output = Char type Tape = ([Char], Char, [Char]) type StateTable = [(State, Input, Output, Move, State)] type History = [(([Char], Char, [Char]), State)]

Haskell-Implementierung eines TM-Simulators step :: (Tape, State) -> StateTable -> (Tape, State) step ((l, input, r), state) s_table state==0 = ((l, input, r), state) otherwise = ((new_l, new_input, new_r), n_state) (out, dir, n_state) = find_next (state, input) s_table (new_l, new_input, new_r) dir==l = move_left (l, out, r) Die step-funktion berechnet nur einen Zustandsübergang der simulierten TM dir==r = move_right (l, out, r) dir==s = (l, out, r)

{-- --} Haskell-Implementierung eines TM-Simulators Ein Zustand für entsprechende Eingabe des Lesekopfs wird in der Zustandstabelle gesucht und die Ausgabe und der Folgezustand werden ermittelt. find_next :: (State, Input) -> StateTable -> (Output, Move, State) find_next (state, input) [] = error "END OF STATE-TABLE and not Match founded" find_next (state, input) ((s, i, out, dir, ns):rest) (state==s && input==i) = (out, dir, ns) (state==s && '#' == i) = (input, dir, ns) otherwise = find_next (state, input) rest

Haskell-Implementierung einer TM-Simulation -- Die Position des Lesekopfs wird hier aktualisiert. move_left :: Tape -> Tape move_left (l, h, r) new_h == '_' = error "left margin reached" otherwise = (tail l, new_h, h:r) new_h = head l move_right :: Tape -> Tape move_right (l, h, r) new_h == '_' = error "right margin reached" otherwise = (h:l, new_h, tail r) new_h = head r

Haskell-Implementierung einer TM-Simulation {-- Die sim-funktion startet die Simulation der Maschine nach Eingabe einer Start-Konfiguration und einer Zustandstabelle. Eine Liste mit allen Zwischenzuständen wird als Ergebnis zurückgegeben. --} sim :: (Tape, State) -> StateTable -> History -> History sim ((l, input, r), 0) s_table history = history sim ((l, input, r), state) s_table history = sim new_tm s_table (new_tm:history) new_tm = step ((l,input,r), state) s_table

Haskell-Implementierung einer TM-Simulation -- Hilfsfunktionen show_states [] = "" show_states (x:xs) = (show_states xs)++" "++show_state(x) show_state ((l,input,r), state) = " "++rev_l++[input]++(cut_tape r)++" "++(show state) ++"\n" ++(spaces (4 + (length rev_l) ))++"T\n" rev_l = reverse_finite l [] spaces n = [' ' _<-[1..n]] cut_tape ('_':x) = [] cut_tape (x:y) = x:(cut_tape y) reverse_finite ('_':x) y = y reverse_finite (x:xs) y = reverse_finite xs (x:y)

Haskell-Implementierung einer TM-Simulation -- Hilfsfunktionen -- Simuliert eine unendliche leere Liste empty_tape :: [Char] empty_tape = '_':empty_tape -- Die Simulation wird gestartet und alle Zwischenzustände ausgegeben start ((l,input,r), state, steps) s_table = putstr (show_states (sim start_config s_table [start_config])) l1 = reverse l ++ empty_tape r1 = r ++ empty_tape start_config = ( (l1, input, r1), state )

Turing-Maschinen weitere Beispiele an der Tafel...