% Logik og sprog, Modul 2, datalogi RUC Henning Christiansen % % % En tracer for Prolog ved udvidet Vanilla; % afsnit 11.1 i "Sprog og abstrakte maskiner" % % (c) 2000, Henning Christiansen % VANILLA INTERPRETER % Basic version with simple tracing %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Diverse hjūlpere: % % trace_code( Forlūns, Baglūns) % % trace_code( Forlūns ) % % SŒfremt tracing er slŒet til, udfŋres koden % Forlūns ved forlūns udfŋrelse, Baglūns ved backtracking. % Forlūns og Baglūns mŒ kun kunne generere Žn lŋsning og % mŒ ikke fejle - i sŒfald gŒr der skudder-mudder trace_code( For, Bag):- vanilla_tracing,!, (For ; Bag, fail). trace_code(_,_). trace_code( For):- vanilla_tracing,!, For. trace_code(_). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % At slŒ tracing til og fra: % % vanilla_trace. % vanilla_notrace. % :- dynamic vanilla_tracing/0. vanilla_tracing. vanilla_trace:- retract( (vanilla_tracing:- _) ), asserta( vanilla_tracing ). vanilla_notrace:- retract( (vanilla_tracing:- _) ), asserta( (vanilla_tracing:- fail) ). % For at undgŒ "unknown pred". % solve( goal ) ... solve(true):- !. solve((A,B)):- !, solve(A), solve(B). solve(A):- trace_code( (write('Enter '), write(A), nl), (write('Fail '), write(A), nl)), clause(A,B), trace_code( (write('Try '), write((A:- B)), nl ), (write('Drop '), write((A:- B)), nl)), solve(B), trace_code( (write('Succeed '), write(A), nl)).