首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应将同一谓词的子句分组。

应将同一谓词的子句分组。
EN

Stack Overflow用户
提问于 2014-01-13 14:45:05
回答 1查看 2.9K关注 0票数 0

这里我想做一个prolog实现,它将生成n,n+1,.2*n-1的排列列表,两个连续值<=2之间的绝对差。例如:对于n=4,我所做排列的列表将是[4,5,6,7],有效的置换将是[5,4,6,7],而无效的置换将是[7,4,6,5],因为7-4 is 3。问题是,我得到了下面的错误clauses for the same predicate should be grouped。我不明白我做了什么wrong..Please帮了我

代码语言:javascript
复制
domains
    el=integer
    list=el*
    lista=list*
predicates
    perm(list,list)
    permutations(integer,list)
    delete(integer,list,list)
    generate(integer,lista)
    create(integer,list)
    create_list(integer,integer,list)
    permutations_aux(integer,list)
    diff(list,integer).
clauses
    create(N,L):-
        M = 2*N,
        create_list(N,M,L).

    create_list(N,M,[N|R]):-
        N<M,
        N1=N+1,
        create_list(N1,M,R).

    create_list(M,M,[]).

    perm([],[]).
    perm(Y,[A|X]):-
        delete(A,Y,Y1),
        perm(Y1,X).

    delete(A,[A|X],X).
    delete(A,[B|X],[B|Y]):-
        delete(A,X,Y).

    permutations(N,X):-
        create(N,X1),
        perm(X1,X).
        diff(X,2).

    permutations_aux(N,X):-
        permutations(N,X).

    diff([],_).
    diff([_],_).
    diff([X,Y|T],M):-
        abs(Y-X) <=M,!,
        diff([Y|T],M).

    generate(N,R):-
        findall(X,permutations_aux(N,X),R).


goal
generate(4,P),
write(P).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-13 15:04:26

错误或警告:

代码语言:javascript
复制
Clauses for the same predicate should be grouped

意思是您交叉定义了不同的子句。换句话说,同名谓词的子句应该在一个组中一起定义。例如:

代码语言:javascript
复制
foo(X) :-
    some stuff
foo(Y) :-
    some stuff

bar(X) :-
    some stuff
bar(Y) :-
    some stuff

如果您这样做,您将得到警告/错误:

代码语言:javascript
复制
foo(X) :-
    some stuff

bar(X) :-
    some stuff

foo(Y) :-
    some stuff

bar(Y) :-
    some stuff

您的错误是在perm(X1,X).子句中在permutations之后有一个句点。它应该是逗号:

代码语言:javascript
复制
permutations(N,X):-
    create(N,X1),
    perm(X1,X).      <--- Error here
    diff(X,2).

permutations_aux(N,X):-
    permutations(N,X).

diff([],_).

所以它真的认为你有:

代码语言:javascript
复制
permutations(N,X):-
    create(N,X1),
    perm(X1,X).

diff(X,2).

permutations_aux(N,X):-
    permutations(N,X).

diff([],_).

它是diff定义的交织。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21094034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档