在prolog中用相同的整数填充列表



我想写一个函数,用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

最新更新