これは、2つのリストを一緒に追加するアルゴリズムです。
Domains
list= integer*
Predicates
nondeterm append(list, list, list)
Clauses
append([], List, List) :- !.
append([H|L1], List2, [H|L3]) :- append(L1, List2, L3).
Goal
append([9,2,3,4], [-10,-5,6,7,8], Ot).
結果はリスト[9,2,3,4,-10,-5,6,7,8]
であり、「」に保存されOt
ます。
私の質問は、これはどのように機能するのかということです。
私が理解しているのは、すべての再帰呼び出しで、最初のリストではテールのみがリストとして取得され(したがって、サイズが小さくなる1
までサイズが小さくなり[]
ます)、2番目の引数 " List2
"はまったく変更されず、3番目の引数は.. 。最初はです。[]
再帰呼び出しを行うたびにテールが取得されますが、なので[]
、そのまま[]
です。
では、どうして突然、3番目の引数( " Ot
")にリストが追加されたのでしょうか。誰かがこのアルゴリズムを段階的に説明できますか?