2016-11-06 14 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