List prolog检查列表中元素的不均匀性

List prolog检查列表中元素的不均匀性,list,prolog,List,Prolog,我试图制作这个序言谓词的不均衡版本: p([ ]). p([a, a|X]) :- p(X). 如果“a”的出现次数为偶数,则返回true。 如果数字是奇数,我不知道如何使它返回真值。 请帮助。您希望直接实现归纳定义: 在这里,我们使用\uuu作为“匹配任何内容”的占位符,而不是要求存在a原子: % a list with 1 entry has an odd number of entries odd_entries([_]). % a list with 2 entries follo

我试图制作这个序言谓词的不均衡版本:

p([ ]).
p([a, a|X]) :- p(X).
如果“a”的出现次数为偶数,则返回true。 如果数字是奇数,我不知道如何使它返回真值。
请帮助。

您希望直接实现归纳定义:

在这里,我们使用
\uuu
作为“匹配任何内容”的占位符,而不是要求存在
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] ;
...