私はプロローグに非常に慣れていないので、チェス盤の騎士が別の正方形にジャンプできるかどうか、または与えられた正方形に騎士がジャンプできるすべての正方形を出力できるかどうかを判断する簡単な方法を作成しようとしています。このメソッドでは、最初の引数を常にインスタンス化する必要があると想定しています。両方のパラメーターを指定すると正しく動作しますが、指定されたパラメーターのみを出力しない理由がわかりません。
% validSquare/2
% validSquare(X1/Y1, X2/Y2) iff the coordinate is a valid position on an 8x8 chessboard.
validSquare(X1/Y1, X2/Y2) :-
X1 >= 1, X1 =< 8,
Y1 >= 1, Y1 =< 8,
X2 >= 1, X2 =< 8,
Y2 >= 1, Y2 =< 8.
% jump/2
% jump(Square1, Square2) iff a knight could jump to the coordinate
% Square1/Square2 on a chessboard.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 + 1,
Y2 is Y1 + 2.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 + 2,
Y2 is Y1 + 1.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 + 1,
Y2 is Y1 - 2.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 + 2,
Y2 is Y1 - 1.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 - 1,
Y2 is Y1 - 2.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 - 2,
Y2 is Y1 - 1.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 - 1,
Y2 is Y1 + 2.
jump(X1/Y1, X2/Y2) :-
validSquare(X1/Y1, X2/Y2),
X2 is X1 - 2,
Y2 is Y1 + 1.
私が言ったように、私は Prolog に非常に慣れていないので、クエリをどのようにフォーマットすればよいかよくわかりません。このクエリは誤りです。
?- jump(1/1, X2/Y2).
ERROR: >=/2: Arguments are not sufficiently instantiated
助けてくれてありがとう。