List 序言:参数没有充分实例化

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*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] ...
您试图使用
=/2
进行表达式求值和赋值,但它不起作用<代码>=/2是统一的。您需要使用
is/2
。例如,
N1是2*N
。即使使用is
is/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] ...