我有3個,4個規則是這樣的:我如何偏離回溯?
pagaTot(X,Acc,PagaMens):- giorno(d(X,_,14),[iniziato(I,_,_),_,ListServ|L]),!,
length(ListaServ,N),N<2,
member(finito(F),L),
I>=6, F=<24,
I1 is round(I)+round((I-round(I))*100)/60,
F1 is round(F)+round((F-round(F))*100)/60,
OreTot is F1-I1,
OreTot =<8,
Paga is (F1-I1)*6,
Acc1 is Paga+Acc,X1 is X+1,
pagaTot(X1,Acc1,PagaMens).
pagaTot(X,Acc,PagaMens):- giorno(d(X,_,14),[iniziato(I,_,_),_,ListServ|L]),!,
length(ListaServ,N),N<2,
member(finito(F),L),
I>=6, F=<24,
I1 is round(I)+round((I-round(I))*100)/60,
F1 is round(F)+round((F-round(F))*100)/60,
OreTot is F1-I1,
OreTot >8,
OreDa7 is OreTot-8,
OreDa6 is OreTot-OreDa7,
Paga is OreDa6*6+OreDa7*7,
Acc1 is Paga+Acc,X1 is X+1,
pagaTot(X1,Acc1,PagaMens).
當系統發現,這是它回溯一個錯誤的選擇。我不希望它再次檢查第一個子目標中的其他選擇 - 'giorno(d(...'),它更好地通向下一個'pagaTot(X ...')規則,這將更有效率每條規則大約需要3,4次調用,我試圖在第一個子目標_,ListServ | L),!,的末尾加上'!',但是這個限制不會讓它進入下一個規則。總不能 我沒有別的想法應該在哪裏這個切口放在是否有解決方案
giorno是一個從我計算各種東西的長結構函子。並且在列表4或5的選擇點中計算應該通過另一個pagaTot: - 當選擇的人不能做到的時候的規則。 – vincent