% Az alábbi program "bizonyítja", hogy a Prolog nem mindenható! % Ugyanis ez a Prolog program egy olyan aritmetikai kifejezést % generál a másodperc töredéke alatt, amelyet az `is´ beépített % eljárás évezredek alatt sem tud kiértékelni. :- use_module(library(between)). % SWI Prologban hibát jelez, nem szükséges % akif(N, Kif): Kif egy olyan Prolog aritmetikai kifejezés, amely 2^n % darab 1 összegét írja le. akif(0, 1). akif(N, X+X) :- N > 0, N1 is N-1, akif(N1, X). % N = 1..Max értékre kiírja a fenti eljárás futásához szükséges időt. time_akif(Max) :- between(1, Max, N), time(akif(N,...), akif(N, _)), nl, fail. time_akif(_). % N = 1..Max értékre kiírja az akif(N, X) eljárás által generált X % aritmetikai kifejezés is/2-vel való kiszámításához szükséges időt. time_is(Max) :- between(1, Max, N), akif(N, AKif), time('... is 1+1+...'(N), X is AKif), write(' '), write(X), nl, fail. time_is(_). % Kiírja Goal első megoldásának előállításához vagy a meghiúsuláshoz % szükséges T időt, a Txt szöveg kiséretében. time(Txt, Goal, T) :- statistics(runtime, [T0,_]), % T0 a Prolog rendszer indítása óta % eltelt CPU idő, msec-ban. ( call(Goal) -> Res = true ; Res = false ), statistics(runtime, [T1,_]), T is T1-T0, format('~w run time =~|~t~3d~9+ sec', [Txt,T]), Res = true. time(Txt, Goal) :- time(Txt, Goal, _). end_of_file.