2013-04-04 85 views
1

我斷言這表明它們是小於10Prolog的比較列表元素頭元素

small([H|T],H):- H=<10. 
    small([_|T],X):-small(T,X). 

這是很簡單的所有數字。但是,我應該如何改變它,以便我可以將每個下一個項目與第一個元素進行比較?

例如,小 - ([4,2,3,9,1,0,12],X)。將顯示X = 2; X = 3; X = 1; X = 0?

+0

更正:謂詞只顯示*一個*號碼,首先小於10。但是,通過在提示符下按';'強制它回溯。 :) – 2013-04-07 16:29:42

回答

0

可以用兩種程序分裂問題,一種採用所述第一元件,然後在該列表的其餘元件,並檢查每個項目是否小於或等於第一元件適用遞歸:

small([M|T],X):- small1(T, M, X). 

small1([H|_], M ,H):- H =< M. 
small1([_|T], M, X):- small1(T, M, X).