List 序言-检查列表是否为空[]
我只是想弄清楚如何检查列表是否为空,我把一些东西放在一起检查列表的长度,另外还应该检查列表是否为空List 序言-检查列表是否为空[],list,prolog,List,Prolog,我只是想弄清楚如何检查列表是否为空,我把一些东西放在一起检查列表的长度,另外还应该检查列表是否为空 % Gives the length of a list. listlength([] , 0 ). listlength([_|Xs] , L ):- listlength(Xs,N), L is N+1. % checks to see that the length of the list is greater than or equal to 3 and n
% Gives the length of a list.
listlength([] , 0 ).
listlength([_|Xs] , L ):-
listlength(Xs,N),
L is N+1.
% checks to see that the length of the list is greater than or equal to 3 and not empty.
check_length( [] ).
check_length( L ):-
listlength(L, Len),
Len >= 3,
L \== []. %This is the bit of code I'm having problems with
it should be false if the list is just [] or empty.
我是一名学生,所以我不需要一个直截了当的答案,我只是想找出我做错了什么 不需要显式测试L是否为空列表;如果长度大于0,则表明
您已经知道如何测试列表是否不为空,因为您在
listLength
中使用了它:L=[| |]
(也就是说,L
是一个至少包含1个元素的列表)。问题是“如何检查列表是否为空”。根据定义,空列表是没有元素的列表,即[]列表。您可以简单地检查您的列表是否与此一致。如果您的使用范围有限,请选择另一个选项:
%calculate the length
len([],0).
len([_|T],N) :- len(T,X), N is X+1.
%check the length
isEmpty(L) :- len(L,X),X=:=0.
为空(列表):-not(成员(\u,列表))。
它检查给定列表是否有任何成员,并返回该成员的否定值
[]
=>无成员,为空
[foo]
=>成员存在,但不是空的。对我有用的东西是:
空列表(List):-List=[]。如果长度>=3,则不能为空;如果为空,则长度为0。您不需要额外的术语。
listLength
不返回任何内容:它试图做出真实的陈述。如果为第二个参数传递一个空列表和一个变量,它会将第二个参数绑定到0。因为您有事实检查长度([])。
那么检查长度(L)
如果L
为空,则成功。但您的意思是,仅当长度大于3时,才希望检查长度(L)
为真。因此,您需要摆脱事实检查长度([])。
不使用内置谓词length/2
有什么特别的原因吗?它必须是最基本的Prolog谓词之一,没有它您无法轻松编写有用的Prolog代码。有了它,length(List,Len),Len>=3就是你所要做的一切(很抱歉这个直截了当的答案)。检查L
的长度是否为3的另一种(不可伸缩的)方法是:L=[[uu,[uuu,[u124;]
,当且仅当L
的长度为>=3时才是真的。只需说isEmpty([])。
非常真的假。这就是所谓的工程:)这清楚地表明我仍然是一个新手在序言:)