Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在Prolog中动态设置参数_List_File_Prolog_Predicate_Arity - Fatal编程技术网

List 在Prolog中动态设置参数

List 在Prolog中动态设置参数,list,file,prolog,predicate,arity,List,File,Prolog,Predicate,Arity,我正在努力使我的代码更加动态。我有一个包含以下内容的文件: 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)

我正在努力使我的代码更加动态。我有一个包含以下内容的文件:

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).

如果arity发生变化,您应该将参数放入列表中并使用


同样的问题顺便说一句,你好,谢谢你的回答。但我有一个问题。怎么可能复制

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).