初始化列表的序言长度将新列表添加到现有列表
Prolog length to initialize list adds new List to existing Lists
puzzle(ListToAdd,ListToAdd1,Res,_,Carry) :-
length(Res,ResultLength),
length(Carry,ResultLength),
domain(Carry,0,1).
首先我使用length 来获取Res 列表的大小(ResultLength),然后我将使用ResultLength 来初始化另一个列表Carry。
然而,在我这样做之后,ListoAdd 和 ListToAdd1 现在都有前面提到的进位列表,我认为这不应该发生。
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。
有谁知道发生了什么事吗?
您遇到问题的原因是:
?- 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!
puzzle(ListToAdd,ListToAdd1,Res,_,Carry) :-
length(Res,ResultLength),
length(Carry,ResultLength),
domain(Carry,0,1).
首先我使用length 来获取Res 列表的大小(ResultLength),然后我将使用ResultLength 来初始化另一个列表Carry。 然而,在我这样做之后,ListoAdd 和 ListToAdd1 现在都有前面提到的进位列表,我认为这不应该发生。
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。
有谁知道发生了什么事吗?
您遇到问题的原因是:
?- 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!