【问题标题】:Prolog file manipulation problemProlog文件操作问题
【发布时间】:2023-04-01 21:54:01
【问题描述】:

我像这样使用 swi prolog 和我的代码。 我从文件中读取数据谓词,它的元数可以改变。我该如何概括它。例如,如果 data(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).

【问题讨论】:

标签: list file prolog


【解决方案1】:

如果谓词的元数似乎发生了变化,最好将其设为元数并给它一个列表参数。然后可以通过调用nth1nth0 来扩展您的findall 查询。

【讨论】:

    【解决方案2】:
    
    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('%t\n',[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).
    

    【讨论】:

    •  % 对不起!缺少谓词定义。添加。 for_1(A,<i>,B) :- A )。 for_1(A,C,D) :- B 是 A+ -1,for_1(B,C,D)。 </i>
    • 我无法运行它。这可能是个问题?
    • 您没有使用 for_2 程序。能多解释一下吗?
    【解决方案3】:
    basla(谓词/Arity):- 咨询('test.pl'), 长度(L,Arity), 对于(1,Nth,Arity), 找到所有(一,( nth1(Nth,L,A), P =.. [谓词|L], 呼叫(P)), LX), list_to_set(LX,U), writef('%t\n',[LX]), Nth = Arity。

    【讨论】:

    • 抱歉,我看不懂,也无法运行。你能解释一下这段代码吗?
    猜你喜欢
    • 2018-08-11
    • 2010-11-13
    • 2011-04-14
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多