Temp
基本ケース で最初に値が与えられますsum([],0)
。これはTemp=0
、上記の再帰呼び出しで発生します。上記の呼び出しは、 Giveなどに追加H
されます。0+H
これを確信するには、クエリの実行をトレースします。
?- trace.
true.
[trace] ?- sum([1,2,3], Sum).
Call: (6) sum([1, 2, 3], _G376) ? creep
Call: (7) sum([2, 3], _G455) ? creep
Call: (8) sum([3], _G455) ? creep
Call: (9) sum([], _G455) ? creep
Exit: (9) sum([], 0) ? creep
^ Call: (9) _G460 is 0+3 ? creep
^ Exit: (9) 3 is 0+3 ? creep
Exit: (8) sum([3], 3) ? creep
^ Call: (8) _G463 is 3+2 ? creep
^ Exit: (8) 5 is 3+2 ? creep
Exit: (7) sum([2, 3], 5) ? creep
^ Call: (7) _G376 is 5+1 ? creep
^ Exit: (7) 6 is 5+1 ? creep
Exit: (6) sum([1, 2, 3], 6) ? creep
Sum = 6.
(creep
は私Enterです。これは SWI-Prolog です。)