Задайте параметры динамически в Прологе
Я пытаюсь сделать мой код более динамичным. У меня есть файл со следующим содержанием:
a(b1, c1, d1).
a(b2, c2, d2).
a(b3, c3, d3).
И как я нахожу все b1
Я делаю список, как это:
[b1, b2, b3].
Когда арность изменяется в файле, например, когда a(b1,c1,d1)
становится a(b1,c1,d1,e1)
мой код не работает. Есть ли способ решить эту проблему? Я использую SWI-Prolog.
start :-
consult('file.pl'),
solve(L1, L2, L3),
list_to_set(L1, X),
write(X).
solve(L1, L2, L3):-
findall(First, data(First, _, _), L1),
findall(Second, data(_, Second, _), L2),
findall(Third, data(_, _, Third), L3).
2 ответа
start:-
consult('file.pl'),
sampling(Arity),
solve(Arity,LL),
list_to_set(LL, X),
write(X).
solve(Arity,LL):-
length(L,Arity),
P =.. [data|L],
findall(L1,(
for(1,N,Arity),
nth1(N,L,A),
findall(A,P,L1)),
LL).
sampling(Arity) :-
see('file.pl'),
read(P),
sampling(P,Arity),
seen.
sampling(end_of_file,_) :- !,seen,fail.
sampling(P,Arity) :-
functor(P,data,Arity),!.
sampling(_,Arity) :-
read(P),
sampling(P,Arity).