リストの要素をアサートする必要があります。この方法では、original
キーを紛失することに注意してください。
:- dynamic time_needed/2.
assert_family(Key) :-
family(Key, List),
assert_list(List).
assert_list([]).
assert_list([N/V|Es]) :-
assertz(time_needed(N, V)),
assert_list(Es).
そしてあなたは電話するassert_family(original).
Prolog に forall/2 (または maplist/2 + library(lambda)) がある場合、コードはよりコンパクトになる可能性があります。
:- dynamic time_needed/2.
assert_family(Key) :-
family(Key, List),
forall(member(N/V, List),
assertz(time_needed(N, V))).
つまり、再帰ループは forall/2 で「インライン化」されています。しかし、そのライブラリの述語は、構文の単純さの背後にいくつかの奇妙な動作を隠しています...より単純な再帰ループを使用してください。