% Kode zum Testen der Effizienzsteigerung % Die Tests sollten mehrmals ausgefuehrt werden, um Verzerrung durch die % Speicherallozierung zu neutralisieren. % Man sollte diese Datei in PROLOG kompilieren (Emacs: CTRL-C CTRL-C B) % ?- test_comp(200001). % ?- test_inter(200001). test_comp(Length) :- length(List, Length), lachen(List), statistics(runtime,_), lachen(List), statistics(runtime,[_,Milliseconds]), write('Laufzeit: '), write(Milliseconds), write('ms'),nl. % test1(2000001). test_inter(Length) :- length(List, Length), init(List), statistics(runtime,_), init(List), statistics(runtime,[_,Milliseconds]), write('Laufzeit: '), write(Milliseconds), write('ms'),nl. lachen(In) :- lachen(1, In). lachen(1, [h|RestIn]) :- lachen(2, RestIn). lachen(2, [a|RestIn]) :- lachen(3, RestIn). lachen(3, [h|RestIn]) :- lachen(2, RestIn). lachen(3, [!]). %% Endlicher Lachautomat % init([h,a,!]). % Startzustand start(1). % Endzustaende final(4). % Uebergaenge delta(1, h, 2). delta(2, a, 3). delta(3, h, 2). delta(3, !, 4). % Initialisierung des Automaten init(String) :- start(StartState), accept(String, StartState). % Abarbeiten der Eingabekette accept([], State) :- final(State). accept([Char|Chars], State) :- delta(State, Char, NextState), accept(Chars, NextState).