我一直在试图编写一个谓词来评估列表的大小是否均匀,并且这必须在不计算列表长度或任何算术运算的情况下完成。这应该比计算长度更容易,但是我没有考虑如何在没有这个的情况下做到这一点。我猜测是一种递归技术,但如果任何人能够帮助它,那将是非常棒的。Prolog中的大小列表
回答
我知道这是为时已晚来回答你的问题,但希望这将帮助:
要查找列表中有奇数长度:
oddlength([X]).
oddlength([X,Y,Z]).
oddlength([X,Y|R]) :- oddlength(R),!.
要查找列表中有偶数长度:
evenlength([]).
evenlength([X,Y|R]) :- evenlength(R),!.
考虑到您只关心奇数/偶数列表长度,请使用匿名变量作为占位符,除了递归调用的列表尾部之外。 –
我发布了这个答案,但删除它,因为这是一个作业问题。一般来说,不要让人们做他们的功课整个解决方案。他们将复制粘贴。 – keyser
@keyser好的,我是新来的,谢谢你的建议。 –
保存logical-purity!只要继续这样的:
evenlength([]). % smallest list with even length is [] (length=0)
evenlength([_|Xs]) :-
oddlength(Xs).
oddlength([_|Xs]) :- % smallest list with odd length is [_] (length=1)
evenlength(Xs).
一些简单的地面evenlength/1
和查询oddlength/1
:
?- evenlength([]).
true.
?- oddlength([]).
false.
?- evenlength([1]).
false.
?- oddlength([1]).
true.
?- evenlength([1,2]).
true.
?- oddlength([1,2]).
false.
?- evenlength([1,2,3]).
false.
?- oddlength([1,2,3]).
true.
注意,这些断言不仅可以测试候选人名单,同时也生成它们:
?- evenlength(Xs).
Xs = []
; Xs = [_A,_B]
; Xs = [_A,_B,_C,_D]
; Xs = [_A,_B,_C,_D,_E,_F]
...
?- oddlength(Xs).
Xs = [_A]
; Xs = [_A,_B,_C]
; Xs = [_A,_B,_C,_D,_E]
; Xs = [_A,_B,_C,_D,_E,_F,_G]
...
使用meta-predicatefoldl/4
和Prolog lambdas我们需要做的是:
evenlength(Xs) :-
foldl(\_^E^O^(O is \E),Xs,1,1). % each item in `Xs` flips the "evenness flag"
用途示例:
?- evenlength([]).
true.
?- evenlength([_]).
false.
?- evenlength([_,_]).
true.
?- evenlength([_,_,_]).
false.
?- evenlength([_,_,_,_]).
true.
让我们不要忘记最普通的查询!
?- evenlength(Xs).
Xs = []
; Xs = [_A,_B]
; Xs = [_A,_B,_C,_D]
; Xs = [_A,_B,_C,_D,_E,_F]
...
- 1. 列表中的Prolog最小值
- 2. 查找Prolog中列表的最小和最大值
- 3. prolog:列表中的局部最大值
- 4. SWI-Prolog的:在列表中
- 5. Prolog中的列表操作
- 6. Prolog中的列表搜索
- 7. Prolog中列表的并置
- 8. Prolog中的列表移位
- 9. Prolog中的逆向列表
- 10. Prolog的列表中添加
- 11. Prolog中的列表长度
- 12. 在Prolog中使用列表的列表
- 13. 列表中的Prolog追加列表
- 14. 由于findall在Prolog中不工作而引起的计数列表大小
- 15. swi-prolog [列表]
- 16. 与Prolog列表
- 17. SICStus Prolog列表
- 18. Prolog - 列表
- 19. netlogo中列表的最大大小?
- 20. 列表对列表的对列表PROLOG
- 21. Prolog列表交集列表
- 22. 列表中查找在列表的列表中的Prolog
- 23. 在Prolog中筛选列表
- 24. 在Prolog中展开列表
- 25. Prolog查找列表中所有位置的最小元素
- 26. html表列大小
- 27. WPF表列大小
- 28. 巴黎之列表的列表Prolog的
- 29. 查找列表中的最大元素及其索引 - Prolog
- 30. Prolog关联列表
你有兴趣的甚至长度的列表。 – false