Prolog 文件操作问题



我像这样使用 swi prolog 和我的代码。 我从文件中读取数据谓词,其 arity 计数可能会更改。我怎么能概括它。例如,如果数据(a1,b1,c1)写入文件,如何找到解决方案?你有什么想法吗?

>    basla:-consult('test.pl'),
>          answer(L1,L2,L3,L4,L5),
>          list_to_set(L1, X),
>        
>          write(X).
>     answer(L1,L2,L3,L4,L5):-
>       findall(First, data(First,_,_,_,_),L1),
>       findall(Second, data(_,Second,_,_,_),L2),
>       findall(Third, data(_,_,Third,_,_),L3).

如果谓词的arity似乎发生了变化,那么几乎总是更好的做法是使其成为arity并给它一个列表参数。然后,可以通过调用 nth1nth0 来扩展findall查询。


basla(Predicate/Arity) :-
        consult('test.pl'),
        length(L,Arity),
        for(1,Nth,Arity),
        findall(A,(
                    nth1(Nth,L,A),
                    P =.. [Predicate|L],
                    call(P)),
                LX),
        list_to_set(LX,U),
        writef('%tn',[U]),
        Nth = Arity.        
for(B,C,A) :-
        A >= B,
        for_2(B,C,A).
for(B,C,A) :-
        A  B,!,
        fail.
for_2(A,A,_).
for_2(A,C,D) :-
        B is A + 1,
        for_2(B,C,D).
basla(谓词/Arity) :-        咨询('测试.pl'),        长度(L,Arity),        对于(1,Nth,Arity),        findall(A,(                    nth1(Nth,L,A),                    P =..[谓词|L],                    呼叫(P)),                LX),        list_to_set(LX,U),        writef('%t',[LX]),        第 N = Arity。       

相关内容

  • 没有找到相关文章