prolog检查列表中元素的不均匀出现



我正在尝试制作这个prolog谓词的不均衡版本:

p([ ]).
p([a, a|X]) :- p(X).

如果";a";是平的。如果这个数字是奇数,我不知道如何使它返回true。请帮忙。

您想要直接实现归纳定义:

这里,我们使用_作为";匹配任何";占位符而不是要求存在a原子:

% a list with 1 entry has an odd number of entries
odd_entries([_]).
% a list with 2 entries followed by a list `More` has
% an odd number of entries of `More` has an odd number of entries
odd_entries([_,_|More]) :- odd_entries(More).

给定任意长度的列表,该定义最终终止,因为每次调用的列表减少了2个条目。递归调用也保持了列表的奇数大小/偶数大小的质量,所以这就是我们想要的。

尝试使用未指定的列表来为条目数为奇数的列表生成建议:

?- odd_entries(L).
L = [_2494] ;
L = [_3234, _3240, _3246] ;
L = [_3234, _3240, _3986, _3992, _3998] ;
L = [_3234, _3240, _3986, _3992, _4738, _4744, _4750] ;
...

最新更新