我正在尝试检查一个列表中的所有子列表是否等于列表的长度。
例如,如果我有[[1,2],[3,4]],那么是正确的,因为我有2个由2个元素组成的列表。
否则,如果我有
[[1],[2,3]]是错误的,因为有2个列表,但并不是所有的列表都有2个元素
[[1,2],[2,3],[3,4]]是错误的,因为我有2个列表,而所有列表都有2个元素,而不是两个
.
我编写了这两个函数:
count([],0).
count([_H|T],N):-count(T,N1),N is N1+1 .
ma([],0).
ma([H|T],N):- count(H,M1),ma(T,N1), M1 is N1.
我对列表中“count”元素进行了计数,并返回了列表中的元素数量N。
由于“count”被执行到0并返回2,所以“ma”函数无法正常工作。经过执行ma函数后到1步骤后,直接生成M1为N1,显然会返回false。我希望在程序结束时使M1等于N1(就像另一种编程语言中一样),但我认为这不是正确的形式。
编辑:
Daniel建议使用:
ma([H], N) :- length(H, N).
ma([H|T], N) :- length(H, N), ma(T, N).
然而,当一个列表有3个子列表,每个子列表都有2个元素时,结果会是2。实际上,结果应该为false(错误),因为列表的数量N必须等于所有子列表中元素的数量N。
我将自己完成此任务,而不使用Prolog的内置谓词。