> :- trace('append/3').
> :- trace(['append/3', 'reverse/2', '=/2']).
append/3 をTRACE指定した後の実行例です。
> append([],X,X).
> append([A|X], Y, [A|Z]) :- append(X,Y,Z).
> ?- append(X,Y,[a]).
TRACE: ENTER append/3(1) - append の1番目の節に入ります。
bot, bot, < a > - 引数は (bot, bot, [a]) です。
TRACE: SUCCESS append/3(1) - append の1番目の節が成功しました。
< >, < a >, < a > - 引数は ([], [a], [a]) になりました。
X: < > - 結果表示です。
Y: < a >
Enter ';' for more choices, otherwise press ENTER --> ;
TRACE: REENTER append/3(2) - バックトラックして append の2番目の節に入ります。
bot, bot, < a > - 引数は (bot, bot, [a]) です。
TRACE: ENTER append/3(1) --- append の1番目の節が呼び出されました。
list, bot, < > --- 引数は (list, bot, []) です。
TRACE: SUCCESS append/3(1) --- append の1番目の節が成功しました。
< >, < >, < > --- 引数は ([], [], []) です。
TRACE: SUCCESS append/3(2) - 呼び出し元の append が成功しました。
< a >, < >, < a > - 引数は ([a], [], [a]) です。
X: < a > - 結果表示です。
Y: < >
Enter ';' for more choices, otherwise press ENTER --> ;
TRACE: REENTER append/3(2) --- 中で呼ばれた append にバックトラックします。
list, bot, < > --- 引数は (list, bot, []) です。
TRACE: FAIL append/3 --- その append が失敗しました。
list, bot, < > --- 引数は (list, bot, []) でした。
TRACE: FAIL append/3 - 呼び出し元の append が失敗しました。
bot, bot, < a > - 引数は (bot, bot, [a]) でした。
no - no が返されました。
|