Я пытаюсь сопоставить подмножество фактов, которые я создаю, и мой тестовый сценарий работал отлично!
x([1,2,3,4],'bleah').
x([1,2,4],'bleah2').
x([1,2],'bleah8').
x([1,3,4],'bleah3').
x([5,6,7,8],'bleah5').
x([6,7,8,9],'bleah6').
fuzzy(X,R) :- x(Z, R), subset(X,Z) .
remaining(X,Y,D,M) :- x(Z,D) , select(X,Z,N), select(Y,N,M).
pair(X,Y,R) :- x([X,Y],R) ; x([Y,X],R).
Output:
?- x([1,2|REST],D).
REST = [3, 4],
D = bleah ;
REST = [4],
D = bleah2 ;
REST = [],
D = bleah8 ;
false.
?- pair(2,1,D).
D = bleah8 ;
false.
?- fuzzy([2,1],R).
R = bleah ;
R = bleah2 ;
R = bleah8 ;
false.
?- remaining(2,1,D,M).
D = bleah,
M = [3, 4] ;
D = bleah2,
M = [4] ;
D = bleah8,
M = [] ;
false.
Затем я добавил факт, чтобы представить мой следующий потенциальный случай, и теперьсовсем сломан.Я новичок в Прологе, я не уверен, почему это или как это исправить.
x([6,X,8,9],'woot') :- (X+0) > 7.
Output:
?- x([1,2|REST],D).
REST = [3, 4],
D = bleah ;
REST = [4],
D = bleah2 ;
REST = [],
D = bleah8 ;
false.
?- pair(2,1,D).
D = bleah8 ;
false.
?- fuzzy([2,1],R).
R = bleah ;
R = bleah2 ;
R = bleah8 ;
ERROR: >/2: Arguments are not sufficiently instantiated
^ Exception: (9) _G260+0>7 ? abort
% Execution Aborted
?- remaining(2,1,D,M).
D = bleah,
M = [3, 4] ;
D = bleah2,
M = [4] ;
D = bleah8,
M = [] ;
ERROR: >/2: Arguments are not sufficiently instantiated
^ Exception: (10) _G270+0>7 ? abort
% Execution Aborted
?- x([_,15,_,_],D).
D = woot.
Предложения приветствуются.