我想写一个函数,用prolog上的相同数字填充列表。例如,我希望列表[_,_,1,_]
为[1,1,1,1]
,或者如果列表全部为空[_,_,_,_]
,则会产生我选择的数字,例如5。有人能帮我吗?
最简单的:
?- L = [_,_,1,_], maplist(=(_), L).
L = [1,1,1,1].
简单:
all(_,[],[]).
all(H,[H|T],[H|T]) :- all(H,T,T).
这给了我:
?- all(_,[_,_,1,_],Xs).
Xs = [1, 1, 1, 1].
?- all(5,[_,_,_,_],Xs).
Xs = [5, 5, 5, 5].
?- all(5,[_,_,1,_],Xs).
false.
?- all(_,[3,_,1,_],Xs).
false.
:- use_module(library(clpfd)).
fill(Ls, Value) :-
chain(Ls, #=),
Ls = [Value|_].
例如
?- Ls = [_,_,1,_], fill(Ls, V).
Ls = [1, 1, 1, 1],
V = 1
?- Ls = [_,_,_,_], fill(Ls, 5).
Ls = [5, 5, 5, 5]
?- Ls = [_,_,1,_], fill(Ls, 7).
false