我试图确定Prolog列表中的元素是否为奇数或偶数。我意识到使用length/2
可能会有更好的解决方案,并且我愿意为这个解决方案标记一个比正确的答案更好的解决方案,我只想知道我在本示例中做错了什么。
我有详细的代码为:
oddSize([]) :-
false.
oddSize([_]).
oddSize([_,_|T]) :-
oddSize(T).
尝试测试此代码时收到的输出是:
1 ?- oddSize([]).
false.
2 ?- oddSize([1]).
true ;
false.
3 ?- oddSize([1,2]).
false.
4 ?- oddSize([1,2,3]).
true ;
false.
似乎正在检测哪个列表中的元素数量为奇数,但是为什么我得到
false
的额外结果呢? 最佳答案
请注意,您可以定义一个最多成功一次的odd_size/1
谓词,即不留下任何选择点(*):
odd_size([_| Tail]) :-
even_size(Tail).
even_size([]).
even_size([_| Tail]) :-
odd_size(Tail).
(*)假设您的Prolog系统使用第一参数索引(对于现代系统为true),这避免了在使用实例化参数调用
even_size/1
谓词时避免创建选择点。一些示例查询:
?- odd_size([1,2,3]).
true.
?- odd_size([1]).
true.
?- odd_size([1,2]).
false.
关于prolog - 如何在Prolog中判断列表长度是奇数还是偶数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34110959/