初始化列表的Prolog长度将新列表添加到现有列表

时间:2015-11-20 18:27:42

标签: list prolog

puzzle(ListToAdd,ListToAdd1,Res,_,Carry) :-
   length(Res,ResultLength),
   length(Carry,ResultLength),
   domain(Carry,0,1).

首先我使用length来获取Res列表(ResultLength)的大小,然后我将使用ResultLength来初始化另一个列表Carry。 但是在我这样做之后,ListoAdd和ListToAdd1现在都有上面提到的Carry列表,我相信它不应该发生。

    Query done: puzzle([D,O,N,A,L,D],[G,E,R,A,L,D],[R,O,B,E,R,T],X,L).


        Before  length(Carry,ResultLength):
        write(ListToAdd):  [_5459,_5499,_5539,_5319]
        write(ListToAdd1): [_5199,_5239,_5279,_5319]

        After  length(Carry,ResultLength):
       write(Carry):      [_12043,_12107,_12171,_12235]
       write(ListToAdd):  [_5459,_5499,_5539, [_12043,_12107,_12171,_12235],_5319]
       write(ListToAdd1): [_5199,_5239,_5279, [_12043,_12107,_12171,_12235],_5319]

我正在使用SICStus Prolog 4.3.2。

有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

您遇到麻烦的原因是:

?- puzzle([D,O,N,A,L,D],[G,E,R,A,L,D],[R,O,B,E,R,T],X,L).

知道了吗?如果没有,请考虑:

?- puzzle([D,O,N,A,L,D],[G,E,R,A,L,D],[R,O,B,E,R,T],X,L).
                   ^             ^                    ^
                   +-------------+--------------------+

那些逻辑变量:)

HTH!