I would use symmetry breaking to reduce the number of solutions. Simple symmetry is that (A, F, J) is a solution, as well as (-A, -F, -J). Thus, we could limit J #> = 0 and keep in mind if J # \ = 0, that is, an inverted solution.
So, first we start by importing the CLP library (FD):
Welcome to SWI-Prolog (Multi-threaded, 64 bits, Version 7.1.16) Copyright (c) 1990-2014 University of Amsterdam, VU Amsterdam ?- use_module(library(clpfd)).
And then we formulate our request, instead of (in) / 2 we should use (ins) / 2, as larsman already noted. Using (in) / 2 reasons is also a messsage error. Brackets do not need a linear shape. So we get:
?- Seats=[Alex, Fred, Jane], Seats ins -5..5, Jane #> 0, all_different(Seats), Alex*4+Fred*3+Jane*2 #= 0, label(Seats), write(Seats), nl, fail; true. [-4,2,5] [-4,4,2] [-3,2,3] [-2,0,4] [-2,2,1] [-1,-2,5] [-1,0,2] [0,-2,3] [1,-4,4] true.
You get unique solutions for different weights, and if you need no one to sit in the middle of a swing. Weights 15, 10 and 6 do this work. Here's an example run, notice the modified (ins) / 2 statement:
?- Seats=[Alex, Fred, Jane], Seats ins -5.. -1\/1..5, Jane #> 0, all_different(Seats), Alex*15+Fred*10+Jane*6 #= 0, label(Seats), write(Seats), nl, fail; true. [-4,3,5] true.
Bye