【发布时间】:2019-07-02 14:36:44
【问题描述】:
我正在尝试检查列表列表中的所有子列表是否等于列表列表的长度。
例如,如果我有 [[1,2],[3,4]] 为真,因为我有 2 个列表 2 个元素。
否则,如果我有
[[1],[2,3]] 为假,因为有 2 个列表但并非所有列表都有 2 元素
[[1,2],[2,3],[3,4]] 是错误的,因为我有 2 个列表并且所有列表都有 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.
我对列表中的计数元素进行了“计数”(并工作)并返回列表中元素的数量。
“ma”函数不起作用,因为“count”执行到0,返回2,执行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 的内置谓词。
【问题讨论】:
-
我叫丹尼尔,不是大卫。
标签: prolog