4

これは、私が取得しようとしているプロローグ出力です:

?-mill(try(a,b,c,d,e),R).
R = (e:-c) ;

以下のコードを使用すると、数値出力が得られます。(e:-c)リストの位置番号ではなく、どうすれば出力を取得できますか?

?-mill(try(a,b,c,d,e),R).
R = (5:-3) ;

コード:

try(-,+,+,+,+).
try(-,-,+,+,+).
try(+,+,+,+,+).
try(+,+,-,-,-).
try(+,-,-,+,-).

construct(X, Y):-
    functor(X,F,N), functor(Y,F,N).

row_number(X, Y):-
    findall(a, X, List), length(List, Y).

reason(Table,A,B):-
    calc(Table,A,+,PA),
    calc(Table,B,+,PB),
    calc(Table,A,+,B,+,PP),
    calc(Table,A,+,B,-,PM),
    PA=PB,
    PM=0.

calc(Table,Column,Body,Number):-
    construct(Table,Var),
    arg(Column,Var,Body),
    row_number(Var,Number).

calc(Table,A,Abody,B,Bbody,Number):-
    construct(Table,Var),
    arg(A,Var,Abody),
    arg(B,Var,Bbody),
    row_number(Var,Number).

mill(Table,B:-A):-
  functor(Table,_,B),
  row_number(reason(Table,A,B),1),
  reason(Table,A,B).
4

1 に答える 1

0

この改造で

mill(Table,B_:-A_):-
    functor(Table,_,B),
    row_number(reason(Table,A,B),1),
    reason(Table,A,B),
    arg(A, Table, A_),
    arg(B, Table, B_).

私は得る

?- gtrace,mill(try(a,b,c,d,e),R).
R = (e:-c) ;
false.

シングルトンPP、その目標を確認する必要があります

...,
calc(Table,A,+,B,+,PP),
...

駄目かも…

于 2013-05-03T15:44:37.243 に答える