为什么'Q'在这个PROLOG计划中不统一

时间:2010-03-24 04:14:43

标签: prolog

我正在写一个PROLOG程序,其中感兴趣的变量(Q)拒绝统一。我用一个hacky解决方案(包括一个write语句)解决了这个问题。但必须有一种方法可以使这种统一,但是对于我的爱,我无法弄明白。

我真的很感激任何帮助。 提前谢谢。

这是我的代码(我在任何地方都注释了我为了简洁而排除了代码)

:- use_module(library(bounds)).
:- use_module(library(lists)).

solve([17],Q,_,_,_):- write(Q). %this is the hacky workaround
solve(L,Q,1,3,2) :- jump(L,Q,N,1,3,2,R), solve(N,R,S,D,M), member([S|[D|[M|[]]]],[[1, 3, 2], [1, 9, 4], [2, 10, 5] this list contains 76 items - all of which are lists of length 3. I have omitted them here for the sake of brevity]).
% there are about 75 other definitions for solve, all of which are structured exactly the same. The only difference is that the numbers in the input parameters will be different in each definition

jump(L,Q,N,S,D,M,R):- member(S,L), not(member(D,L)), member(M,L), delete(L,S,X), delete(X,M,Y), append(Y,[D],N), append(Q,[[S,D]],R).

cross_sol(Q) :- solve([5,9,10,11,17,24],Q,S,D,M), member([S,D,M], [
I have edited out this list here for the sake of brevity. It is the same list found in the definition of solve
]).

由于某种原因,Q没有统一。请帮忙! 谢谢!

1 个答案:

答案 0 :(得分:1)

cross_sol / 1谓词似乎格式不正确。

cross_sol(Q) :- solve([5,9,10,11,17,24],[],S,D,M), member([S,D,M], [ I have edited out this list here for the sake of brevity. It is the same list found in the definition of solve ]).

变量Q是一个单例 - 它不会在正文中的任何地方引用(除非它是你被抑制的部分)。