我正在尝试确定 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 系统使用第一个参数索引(对于现代系统是正确的),这避免了在使用实例化参数调用 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/