List 序言:参数没有充分实例化
我有以下问题: 生成长度为2*n+1的所有子字符串,这些子字符串由0、1或-1的值组成,因此a1=…、a2n+1=0和| a(i+1)-ai |=1或2,对于我们在这个答案中使用的每1(这主要是猜测) :-使用_模块(库(clpfd))。 n_qfd33721532(n,Zs):- Zs=[E | Es], N*2+1#=L, 长度(Zs,L), Zs ins-1..1, 最后(Zs,0), 链(Es,E)。 链_neq([],q)。 链(E1 | Es),E0):- E0#\=E1, 链(Es,E1)。 示例查询: ?- n_qfd33721532(N, Zs), labeling([], Zs). N = 0, Zs = [0] ; N = 1, Zs = [-1, 1, 0] ; N = 1, Zs = [ 0,-1, 0] ; N = 1, Zs = [ 0, 1, 0] ; N = 1, Zs = [ 1,-1, 0] ; N = 2, Zs = [-1, 0,-1, 1, 0] ; N = 2, Zs = [-1, 0, 1,-1, 0] ; N = 2, Zs = [-1, 1,-1, 1, 0] ; N = 2, Zs = [-1, 1, 0,-1, 0] ; N = 2, Zs = [-1, 1, 0, 1, 0] ; N = 2, Zs = [ 0,-1, 0,-1, 0] ; N = 2, Zs = [ 0,-1, 0, 1, 0] ; N = 2, Zs = [ 0,-1, 1,-1, 0] ; N = 2, Zs = [ 0, 1,-1, 1, 0] ; N = 2, Zs = [ 0, 1, 0,-1, 0] ; N = 2, Zs = [ 0, 1, 0, 1, 0] ; N = 2, Zs = [ 1,-1, 0,-1, 0] ; N = 2, Zs = [ 1,-1, 0, 1, 0] ; N = 2, Zs = [ 1,-1, 1,-1, 0] ; N = 2, Zs = [ 1, 0,-1, 1, 0] ; N = 2, Zs = [ 1, 0, 1,-1, 0] ; N = 3, Zs = [-1, 0,-1, 0,-1, 1, 0] ... ?-n_qfd33721532(n,Zs),标签([],Zs)。 N=0,Zs=[0] ; N=1,Zs=[-1,1,0] ; N=1,Zs=[0,-1,0] ; N=1,Zs=[0,1,0] ; N=1,Zs=[1,-1,0] ; N=2,Zs=[-1,0,-1,1,0] ; N=2,Zs=[-1,0,1,-1,0] ; N=2,Zs=[-1,1,-1,1,0] ; N=2,Zs=[-1,1,0,-1,0] ; N=2,Zs=[-1,1,0,1,0] ; N=2,Zs=[0,-1,0,-1,0] ; N=2,Zs=[0,-1,0,1,0] ; N=2,Zs=[0,-1,1,-1,0] ; N=2,Zs=[0,1,-1,1,0] ; N=2,Zs=[0,1,0,-1,0] ; N=2,Zs=[0,1,0,1,0] ; N=2,Zs=[1,-1,0,-1,0] ; N=2,Zs=[1,-1,0,1,0] ; N=2,Zs=[1,-1,1,-1,0] ; N=2,Zs=[1,0,-1,1,0] ; N=2,Zs=[1,0,1,-1,0] ; N=3,Zs=[-1,0,-1,0,-1,1,0] ...List 序言:参数没有充分实例化,list,prolog,clpfd,List,Prolog,Clpfd,我有以下问题: 生成长度为2*n+1的所有子字符串,这些子字符串由0、1或-1的值组成,因此a1=…、a2n+1=0和| a(i+1)-ai |=1或2,对于我们在这个答案中使用的每1(这主要是猜测) :-使用_模块(库(clpfd))。 n_qfd33721532(n,Zs):- Zs=[E | Es], N*2+1#=L, 长度(Zs,L), Zs ins-1..1, 最后(Zs,0), 链(Es,E)。 链_neq([],q)。 链(E1 | Es),E0):- E0#\=E1, 链(Es
您试图使用
=/2
进行表达式求值和赋值,但它不起作用<代码>=/2是统一的。您需要使用is/2
。例如,N1是2*N
。即使使用isis/2
要求在计算表达式之前所有变量都有值,但仍然不起作用。检查你的表情。例如,您希望abs(N-M)做什么?它不会计算给定的N
的M
,反之亦然。
genAll(N) :-
N1 = 2*N,
N2 = N1+1,
generate(L1,N2),
valid(L1),
write('['),
printl(L1).
printl([]) :-
write(']').
printl([0|T]) :-
write('0 '),
printl(T).
printl([1|T]) :-
write('1 '),
printl(T).
printl([-1|T]) :-
write('-1 '),
printl(T).
:- use_module(library(clpfd)).
n_qfd33721532(N, Zs) :-
Zs = [E|Es],
N*2 + 1 #= L,
length(Zs, L),
Zs ins -1..1,
last(Zs, 0),
chain_neq(Es, E).
chain_neq([], _).
chain_neq([E1|Es], E0) :-
E0 #\= E1,
chain_neq(Es, E1).
?- n_qfd33721532(N, Zs), labeling([], Zs).
N = 0, Zs = [0]
; N = 1, Zs = [-1, 1, 0]
; N = 1, Zs = [ 0,-1, 0]
; N = 1, Zs = [ 0, 1, 0]
; N = 1, Zs = [ 1,-1, 0]
; N = 2, Zs = [-1, 0,-1, 1, 0]
; N = 2, Zs = [-1, 0, 1,-1, 0]
; N = 2, Zs = [-1, 1,-1, 1, 0]
; N = 2, Zs = [-1, 1, 0,-1, 0]
; N = 2, Zs = [-1, 1, 0, 1, 0]
; N = 2, Zs = [ 0,-1, 0,-1, 0]
; N = 2, Zs = [ 0,-1, 0, 1, 0]
; N = 2, Zs = [ 0,-1, 1,-1, 0]
; N = 2, Zs = [ 0, 1,-1, 1, 0]
; N = 2, Zs = [ 0, 1, 0,-1, 0]
; N = 2, Zs = [ 0, 1, 0, 1, 0]
; N = 2, Zs = [ 1,-1, 0,-1, 0]
; N = 2, Zs = [ 1,-1, 0, 1, 0]
; N = 2, Zs = [ 1,-1, 1,-1, 0]
; N = 2, Zs = [ 1, 0,-1, 1, 0]
; N = 2, Zs = [ 1, 0, 1,-1, 0]
; N = 3, Zs = [-1, 0,-1, 0,-1, 1, 0]
...