在prolog和java接口中,我无法执行查询

在prolog和java接口中,我无法执行查询,java,prolog,n-queens,Java,Prolog,N Queens,我正在用prolog解决8个皇后问题。我是prolog的初学者。我 想打印解决方案列表,但我的查询每。。。 有人能帮我吗 package family; import java.util.*; import jpl.*; import jpl.Query; /** * */ public class family { /** * @param args the command line arguments */ public

我正在用prolog解决8个皇后问题。我是prolog的初学者。我 想打印解决方案列表,但我的查询每。。。 有人能帮我吗

package family;

import java.util.*; 
import jpl.*; 
import jpl.Query;
 /** 
  *
 */ 
public class family {

      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
         // TODO code application logic here
         Query q1 = new Query("consult", new Term[] {new Atom("check.pl")});
         System.out.println((q1.hasSolution() ? "succeeded" : "failed"));
         java.util.Hashtable solution;
         Variable X = new Variable();


         Query q4 = new Query(new Compound("solution", new Term[] { new jpl.Integer(8), X}));
         System.out.println((q4.hasSolution() ? "succeeded" : "failed"));
          while ( q4.hasMoreSolutions() )
          {
              solution = q4.nextSolution();
              System.out.println( "X = " + solution.get("X"));
          }
      }
 }

这是我的prolog代码

    solution( Ylist)  :-   
        sol( Ylist, [1,2,3,4,5,6,7,8], [1,2,3,4,5,6,7,8],                        
                      [-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7],
                      [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] ). 
      %sol( [], [], Dy, Du, Dv). sol( [Y | Ylist], [X | Dx1], Dy, Du, Dv)     :-
        del( Y, Dy, Dy1), U is X-Y, del( U, Du, Du1), V is X+Y, 
        del( V, Dv, Dv1), sol( Ylist, Dx1, Dy1, Du1, Dv1).  
      del( Item, [Item | List], List). del( Item, [First | List], [First |    List1] )  :-
       del( Item, List, List1).
         gen( N, N, [N]).
      gen( N1, N2, [N1|List]) :- 
           N1 < N2, M is N1+1, gen(M, N2, List).

      solution( N, S) :-        gen(1, N, Dxy), Nu1 is 1-N, Nu2 is N-1, 
        gen(Nu1, Nu2, Du), Nv2 is N+N,
              gen(2, Nv2, Dv), sol( S, Dxy, Dxy, Du, Dv).
解决方案(Ylist):-
sol(Ylist[1,2,3,4,5,6,7,8],[1,2,3,4,5,6,7,8],
[-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7],
[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] ). 
%溶胶([]、[]、Dy、Du、Dv)。溶胶([Y|Ylist],[X|Dx1],Dy,Du,Dv):-
del(Y,Dy,Dy1),U是X-Y,del(U,Du,Du1),V是X+Y,
del(V,Dv,Dv1),sol(Ylist,Dx1,Dy1,Du1,Dv1)。
del(项目,[项目|列表],列表)。del(项目[第一个列表],[第一个列表1]):-
del(项目、列表、列表1)。
gen(N,N,[N])。
gen(N1,N2,[N1 |列表]:-
N1
这是您重新格式化的序言代码

solution( Ylist) :-   
    sol( Ylist,
        [1,2,3,4,5,6,7,8],
        [1,2,3,4,5,6,7,8],                        
        [-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7],
        [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16] ). 

sol( [], [], _Dy, _Du, _Dv).
sol( [Y | Ylist], [X | Dx1], Dy, Du, Dv)     :-
    del( Y, Dy, Dy1), U is X-Y, del( U, Du, Du1), V is X+Y, 
    del( V, Dv, Dv1), sol( Ylist, Dx1, Dy1, Du1, Dv1).  
del( Item, [Item | List], List).
del( Item, [First | List], [First |    List1] )  :-
    del( Item, List, List1).
gen( N, N, [N]).
gen( N1, N2, [N1|List]) :- 
    N1 < N2, M is N1+1, gen(M, N2, List).

solution( N, S) :-
    gen(1, N, Dxy), Nu1 is 1-N, Nu2 is N-1, 
    gen(Nu1, Nu2, Du), Nv2 is N+N,
    gen(2, Nv2, Dv), sol( S, Dxy, Dxy, Du, Dv).

这段代码是你自己写的,还是你在某处找到了它却无法运行?如果你自己写的话,我想你可以告诉我们更多关于哪个方面不起作用的信息。你得到帮助的几率会更高。
2 ?- solution(8,L).
L = [1, 5, 8, 6, 3, 7, 2, 4] ;
L = [1, 6, 8, 3, 7, 4, 2, 5] ;
...