Navigation  without Java Scripts

Source Code for the N Queens Problem

DOMAINS
  queen    = q(integer, integer)
  queens   = queen*
  freelist = integer*
  board    = board(queens, freelist, freelist, freelist, freelist)

PREDICATES
  nondeterm placeN(integer, board, board)
  nondeterm place_a_queen(integer, board, board)
  nondeterm nqueens(integer)
  nondeterm makelist(integer, freelist)
  nondeterm findandremove(integer, freelist, freelist)
  nextrow(integer, freelist, freelist)

CLAUSES
  nqueens(N):-
        makelist(N,L),
        Diagonal=N*2-1,
        makelist(Diagonal,LL),
        placeN(N,board([],L,L,LL,LL),Final),
        write(Final).

  placeN(_,board(D,[],[],D1,D2),board(D,[],[],D1,D2)):-!.
  placeN(N,Board1,Result):-
        place_a_queen(N,Board1,Board2),
        placeN(N,Board2,Result).

  place_a_queen(N,
                board(Queens,Rows,Columns,Diag1,Diag2),
                board([q(R,C)|Queens],NewR,NewC,NewD1,NewD2)):-
        nextrow(R,Rows,NewR),
        findandremove(C,Columns,NewC),
        D1=N+C-R,findandremove(D1,Diag1,NewD1),
        D2=R+C-1,findandremove(D2,Diag2,NewD2).

  findandremove(X,[X|Rest],Rest).
  findandremove(X,[Y|Rest],[Y|Tail]):-
        findandremove(X,Rest,Tail).

  makelist(1,[1]).
  makelist(N,[N|Rest]) :-
        N1=N-1,makelist(N1,Rest).

  nextrow(Row,[Row|Rest],Rest).

GOAL    nqueens(5),nl.