我想使用" extract"的结果。 (W)在valid_seq中,然后在valid_columns中使用。
到目前为止,我已尝试过此操作,但它不起作用:
extract(_,[],[]).
extract(K,[X|Y],[H|L]) :- nth1(K,X,H), extract(K,Y,L).
valid_columns([],[]).
valid_columns([H|L],[X|Y],K) :- b_w(X),
extract(K,X,W),
valid_seq(H,W),
K1 is K+1,
valid_columns(L,Y,K1).
编辑:
我正在尝试解决非图形问题。 因此,从每个行列表中,我必须提取列以验证它们。这是函数" extract"
提取列后,我需要验证它们。 实施例
valid_column([[1,1,1,1,1],[1,0,0,0,0],[1,1,1,1,1],[0,0,0,0,1],[1,1,1,1,1]],[3,1],1).
false.
这里我要问每个[]中的第一个值是否符合[3,1]。 在这种情况下应该是真的。因为我有[1 1 1 0 1]。
这是我的代码:
test_cst(0,[0|S],S).
test_cst(0,[],[]).
test_cst(N,[1|T],S):-
N1 is N-1,
test_cst(N1,T,S).
valid_seq([],[]).
valid_seq(L,[0|T]):-valid_seq(L,T).
valid_seq([H|L],[1|T]):-test_cst(H,[1|T],S),valid_seq(L,S).
b_w([]).
b_w([H|L]) :- H is 0, b_w(L);H is 1, b_w(L).
valid_lines([],[]).
valid_lines([H|L],[X|Y]) :- b_w(X),
valid_seq(H,X),
valid_lines(L,Y).
extract(_,[],[]).
extract(K,[X|Y],[H|L]) :- nth1(K,X,H), extract(K,Y,L).
valid_columns([],_,_).
valid_columns([H|L],X,K) :- valid_column(X,H,K),
K1 is K+1,
valid_columns(L,X,K1).
valid_column(X,H,K) :- b_w(X),
extract(K,X,W),
valid_seq(H,W).