我正在尝试匹配我正在创建的事实的子集,并且我的测试用例运行良好!
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')。 模糊(X,R):- x(Z,R),子集(X,Z)。 剩余(X,Y,D,M):- x(Z,D),选择(X,Z,N),选择(Y,N,M)。 对(X,Y,R):- x([X,Y],R);x([Y,X],R)。 输出: ?- x([1,2|REST],D)。 休息 = [3, 4], D = 呜呜 休息 = [4], D = bleah2 ; 休息 = [], D = bleah8 ; 错误的。 ?- 对(2,1,D)。 D = bleah8 ; 错误的。 ?- 模糊([2,1],R)。 R = 呜呜 R = bleah2 ; R = bleah8 ; 错误的。 ?- 剩余(2,1,D,M)。 D = 呜呜, M = [3, 4] ; D = bleah2, M = [4] ; D = bleah8, M = []; 错误的。
然后我添加了一个事实来代表我的下一个潜在案例,现在它已经很糟糕了。我是 Prolog 的新手,我不确定这是为什么或如何解决它。
x([6,X,8,9],'woot') :- (X+0) > 7。 输出: ?- x([1,2|REST],D)。 休息 = [3, 4], D = 呜呜 休息 = [4], D = bleah2 ; 休息 = [], D = bleah8 ; 错误的。 ?- 对(2,1,D)。 D = bleah8 ; 错误的。 ?- 模糊([2,1],R)。 R = 呜呜 R = bleah2 ; R = bleah8 ; 错误:> / 2:参数没有充分实例化 ^ 例外: (9) _G260+0>7 ? 中止 % 执行中止 ?- 剩余(2,1,D,M)。 D = 呜呜, M = [3, 4] ; D = bleah2, M = [4] ; D = bleah8, M = []; 错误:> / 2:参数没有充分实例化 ^ 例外:(10) _G270+0>7 ? 中止 % 执行中止 ?- x([_,15,_,_],D)。 D = 羊毛。
欢迎提出建议。