Prolog:区分数字和字母列表

时间:2016-11-06 20:05:46

标签: prolog

我需要编写一个必须包含3个以上元素的列表,如果元素不是数字,如果元素是数字,则必须包含3个元素,第3个元素必须是第1个和第2个元素的加法结果元件。这就是我所拥有的:

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),因为第一个事实虽然它不应该,因为这是一个数字列表,它应该说不。但我不知道如何区分数字列表和字母列表

1 个答案:

答案 0 :(得分: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.