我有以下代码:
check([],[]).
check([X], [Y]) :-
X > 0,
Y is 1.
check([X], [Y]) :-
X =:= 0,
Y is 0.
check([L1|Tail], [L2|Tail2]) :-
L1 > 0,
L2 is 1,
check(Tail,Tail2).
check([L1|Tail], [L2|Tail2]) :-
L1 =:= 0,
L2 is 0,
check(Tail,Tail2).
Run Code Online (Sandbox Code Playgroud)
谓词检查创建一个表,用于替换大于0into的所有项1.这个谓词适用于这样的简单列表L = [3,4,5,6,0]并生成一个列表L1 = [1,1,1,1,0].
我需要进行谓词检查以接受列表作为项目列表.
例如:L = [[2, 3, 4], [4, 0, 6], [5, 6, 3]].列表中的项目与项目列表的项目一样多.这意味着如果列表包含3个项目列表,则每个项目列表应包含3个项目.
对于列表中每个项目的相同关系,通常最好描述单个元素的关系,然后使用maplist/3:
check(0, 0).
check(N, 1) :- N > 0.
Run Code Online (Sandbox Code Playgroud)
示例查询:
?- maplist(check, [3,4,5,6,0], Ls).
Ls = [1, 1, 1, 1, 0] ;
false.
Run Code Online (Sandbox Code Playgroud)
现在,嵌套列表的情况转换为嵌套的maplist/3:
?- maplist(maplist(check), [[2, 3, 4], [4, 0, 6], [5, 6, 3]], Ls).
Ls = [[1, 1, 1], [1, 0, 1], [1, 1, 1]] ;
false.
Run Code Online (Sandbox Code Playgroud)