2016-11-06 60 views
1

如果元素不是数字,并且如果元素是数字,那么我需要编写一个必须包含多于3个元素的列表,它必须包含3个元素,第三个元素必须是添加第一个和第二个元素的结果。这是我有:序言:区分数字和字母列表

mylist([W, X,Y,Z|_]). % List contains at least 3 Elements 
mylist([X,Y,Z]):- Z is X+Y. % if there are 3 numbers, third number is the addition of first and second 

问题是,这是太笼统了,只能部分工作。它会与mylist(3,3,3)匹配,因为它不应该是第一个事实,因为这是一个数字列表,它应该说不。但我不知道我怎么能一个数字名单和信件名单区分

+0

mylist([1,2,A])应该是什么结果。有两个数字和一个字母?如果它至少有一个数字,那么从你的描述中,该列表应该只有数字,长度为3? – coder

+0

对不起,我的错误(我编辑了这个问题来反映这一点)。如果它不是数字,它必须包含3个以上的元素(长度> 3)。如果它是一个数字,那么它必须包含3.所以,mylist([1,2,A])将是否定的,因为它只包含3个元素,而不是全部都是数字。 – Enigma

+0

你想说“如果至少有一个元素不是数字”?因为否则[1,2,A,B]长度大于3且不是所有数字... – coder

回答

1

你可以使用它成功时,参数是一个数字编号/ 1:

mylist([_, _,_,_|_]). 
mylist([X,Y,Z]):- number(X),number(Y),number(Z),Z =:=X+Y. 

现在MYLIST([ 3,3,3])失败:

?- mylist([3,3,3]). 
false. 
+1

你真的应该用'Z =:= X + Y'来代替'is',例如这个失败:'2是1.5 + 0.5'。 '是/ 2'是**不是比较**! – 2016-11-07 07:37:27

+0

是的,你有绝对的权利,我会编辑帖子谢谢! – coder