我在Prolog中将其定义如下:
listOfa([H|T]):- H = 'a', listOfa(T).
listOfa([]).
它做我想做的事。它检查列表中的所有项是否都是某个元素,在本例中为字符a
,并相应地返回true或false。但是,如果列表为空,则返回true,我不希望它。除此之外,我不确定除了空列表之外还有什么用作递归的基本情况。如何在没有为空列表返回true的情况下维护递归?
答案 0 :(得分:3)
很自然地从空列表和非空列表的两个子句开始,实际上你可以保留这种模式!您可以使用单独的谓词轻松解决此问题,如果其参数是包含至少一个元素的列表,则该谓词为真。
例如:
not_empty([_|_]).
然后,发布此谓词的连接以及您已成功实施的谓词。
如果需要,您还可以将其组合成仅包含此连接的第三个谓词。
另外,请检查一下:
?- maplist(=(a), Ls).
在结合这些目标之后,您可以 - 通过纯粹的代数共鸣 - 找到更短的解决方案!