2016-04-15 186 views
1

我在Prolog中有下面的代碼,問題是當我運行代碼時,它返回每個數據相同的結果。prolog中的謂詞錯誤 - 每個日期的相同結果

?- run(Diagnosis). 
Diagnosis='There is no problem with anemia'. 

的KB是在另一個文件並加載它,並在開始斷言我加載patient3例如,它應該返回

Diagnosis ='Iron deficiency' 

需要注意的是啓動謂詞僅供檢查,如果代碼工作權目前! 當我運行跟蹤這個文件就說明首先嚐試的第一個規則。它失敗在check_RTC當它試圖去其他規則謂詞症狀返回symptomNeg ..但爲什麼呢? 它應該從頭開始所有的數據,並對每個下一個規則進行檢查,直到找到不失敗的規則。

:- ['kb_anemia_V4.pl']. 

run(Diagnosis) :- 
    clause(kb_da(patient3,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]),Body), 
    rule(kb_da(patient3,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]),Diagnosis). 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), %OK 
     check_WBC_PLT(FullBloodTest,noPancytopenia), 
     check_RTC(FullBloodTest,rtcUp2), 
     check_HBS(ElectricalHb,hbSZero), 
     Diagnosis = 'Spherocytcocis.'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcUp2), 
     check_HBS(ElectricalHb,hbsUpZero), 
     Diagnosis = 'Drepanocytocis.'.  

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcUp2), 
     check_HBS(ElectricalHb,hbSZero) ; 
     check_HBS(ElectricalHb,hbsUpZero), 
     Diagnosis = 'No problem with Spherocytocis or Drepanocytocis.'.  

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2), 
     check_MCV(FullBloodTest,mcvLow), 
     checkFerritin(FullBloodTest,ferHigh), 
     checkElectrofHb([Symptoms,ElectricalHb],yesElectr), 
     Diagnosis='Thalassemia'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2), 
     check_MCV(FullBloodTest,mcvLow), 
     checkFerritin(FullBloodTest,ferHigh), 
     checkElectrofHb([Symptoms,ElectricalHb],noElectr), 
     Diagnosis = 'There is not problem with anemia,probably hemochromatosis,because of High feritin.'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2), 
     check_MCV(FullBloodTest,mcvLow), 
     checkFerritin(FullBloodTest,ferLow), 
     check_HCT_Hb_FE([FullBloodTest,PersData],hctLow), 
     checkRBC([FullBloodTest,PersData],rbcLow), 
     Diagnosis = 'Iron Deficiency'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2), 
     check_MCV(FullBloodTest,mcvLow), 
     checkFerritin(FullBloodTest,ferLow), 
     check_HCT_Hb_FE([FullBloodTest,PersData],hctLow), 
     checkRBC([FullBloodTest,PersData],rbcHigh), 
     checkElectrHb([[Symptoms,ElectricalHb]],electro), 
     Diagnosis = 'Minor Thalassemia'. 


rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2), 
     check_MCV(FullBloodTest,mcvLow), 
     checkFerritin(FullBloodTest,ferLow), 
     check_HCT_Hb_FE([FullBloodTest,PersData],hctHigh), 
     checkRBC([FullBloodTest,PersData],rbcHigh), 
     checkElectrHb([[Symptoms,ElectricalHb]],electro), 
     Diagnosis = 'Minor Thalassemia'. 



rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptNeg), 
      Diagnosis = 'There is not problem with anemia.'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2), 
     check_MCV(FullBloodTest,mcvNormal), 
     checkFerritin(FullBloodTest,ferHigh), 
     checkElectrofHb([Symptoms,ElectricalHb],yesElectr), 
     Diagnosis='Thalassemia'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2),  
     check_MCV(FullBloodTest,mcvHigh), 
     check_B12_RBC([PersData,FullBloodTest,SpecBloodTest],b12Low), 
     Diagnosis = 'B12 Anemia'. 

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), 
     check_WBC_PLT(FullBloodTest,noPancytopenia) , 
     check_RTC(FullBloodTest,rtcLess2),  
     check_MCV(FullBloodTest,mcvHigh), 
     check_Folic(SpecBloodTest,folic), 
     Diagnosis = 'Folic Acid Anemia'.   

rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     symptoms(Symptoms,symptPos), %OK 
     check_WBC_PLT(FullBloodTest,yesPancytopenia), 
     Diagnosis = 'Check bone marrow'. 


symptoms(Symptoms,symptPos) :- 
    check_symptomList(Symptoms), !. 
symptoms(Symptoms,symptNeg). 




check_symptomList([H|T]) :- 
    SymptomList = ['Πονοκέφαλος', 'Αδυναμία', 'Έλλειψη αυτοσυγκέντρωσης', 
     'Απώλεια βάρους', 'Απώλεια όρεξης', 'Ωχρότητα', 
     'Επώδυνη σπλήνα', 'Ταχυκαρδία', 'Δύσπνοια','Γλωσσίτιδα','Πληγές', 
     'Ελλειπής διατροφή', 'πατερας_Στίγμα', 'πατερας_Μεσογειακή', 
     'μητερα_Στίγμα', 'μητερα_Μεσογειακή', 'Ιδιαίτερο'], 
    member(H,SymptomList). 
check_symptomList([H|T]) :- 
    check_symptomList(T). 



check_WBC_PLT([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT], noPancytopenia) :- 
    number(WBC), number(PLT), 
     (WBC > 4500, PLT>150) 
;  number(WBC), number(PLT),(WBC > 4500, PLT=<150) 
;  number(WBC), number(PLT),(WBC =< 4500, PLT>150). 

check_WBC_PLT([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],yesPancytopenia) :- 
    number(WBC), number(PLT), 
     (WBC =< 4500, PLT=<150). 



check_RTC([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],rtcLess2):- 
     number(RTC),RTC=<2. 
check_RTC([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],rtcUp2):- 
     number(RTC),RTC>2. 


check_MCV([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],mcvLow):- 
     number(MCV), MCV=<79. 

check_MCV([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],mcvNormal):- 
     number(MCV), MCV>79,MCV<97. 

check_MCV([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],mcvHigh):-  
     number(MCV), MCV=<97. 


check_HBS([HbA1,HbA2,HbS,HbF,Schema_RBC],hbSZero):- 
     number(HbS), HbS=0, 
     Schema_RBC='Σφαίρα'. 

check_HBS([HbA1,HbA2,HbS,HbF,Schema_RBC],hbSZero):- 
     number(HbS), HbS=0.  

check_HBS([HbA1,HbA2,HbS,HbF,Schema_RBC],hbsUpZero):- 
     number(HbS), HbS>0, 
     Schema_RBC=='Δρεπάνι'. 
check_HBS([HbA1,HbA2,HbS,HbF,Schema_RBC],hbsUpZero):- 
     number(HbS), HbS>0.  

checkFerritin([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],ferLow):- 
     number(Ferritin),Ferritin=<20. 
checkFerritin([WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],ferHigh):- 
     number(Ferritin),Ferritin>20.  

checkElectrofHb([Symptoms, ElectricalHb],electro):-  
    Symptoms = ['Πονοκέφαλος', 'Αδυναμία', 'Έλλειψη αυτοσυγκέντρωσης', 
     'Απώλεια βάρους', 'Απώλεια όρεξης', 'Ωχρότητα', 
     'Επώδυνη σπλήνα', 'Ταχυκαρδία', 'Δύσπνοια','Γλωσσίτιδα','Πληγές', 
     'Ελλειπής διατροφή', 'πατερας_Στίγμα', 'πατερας_Μεσογειακή', 
     'μητερα_Στίγμα', 'μητερα_Μεσογειακή', 'Ιδιαίτερο'], 
     ElectricalHb = [HbA1,HbA2,HbS,HbF,Schema_RBC], 
     member('Ιδιαίτερο', Symptoms), 
     (member('πατερας_Στίγμα', Symptoms), 
      member('μητερα_Μεσογειακή', Symptoms)) 
    ; (member('πατερας_Μεσογειακή', Symptoms), 
      member('μητερα_Στίγμα', Symptoms)) 
    ; (member('πατερας_Μεσογειακή', Symptoms), 
      member('μητερα_Μεσογειακή', Symptoms)), 
     number(HbF),HbF>2,HbF<9, 
     number(HbA1), HbA1<5. 



check_HCT_Hb_FE([[WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],[Hlikia,Filo,Egkimosini]],hctLow):- 
     (Filo='male',number(Hct),number(Hb),number(Fe),Hct<40,Hb<14,Fe<55 
     ; Filo='female',number(Hct),number(Hb),number(Fe),Hct<36,Hb<10,Fe<45 
     ; Filo='male',Egkimosini=yes,number(Hct),number(Hb),number(Fe),Hct<36,Hb<12,Fe<55). 


check_HCT_Hb_FE([[WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],[Hlikia,Filo,Egkimosini]],hctHigh). 

checkRBC([[WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],[Hlikia,Filo,Egkimosini]],rbcLow):- 
     (Filo='male',number(RBC),RBC<4.5); 
     (Filo='female',number(RBC),RBC<3.8). 

checkRBC([[WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],[Hlikia,Filo,Egkimosini]],rbcHigh):- 
     (Filo='male',number(RBC),RBC>6); 
     (Filo='female',number(RBC),RBC>4.9). 


checkElectrHb([Symptoms, ElectricalHb],electro):-  
    Symptoms = ['Πονοκέφαλος', 'Αδυναμία', 'Έλλειψη αυτοσυγκέντρωσης', 
     'Απώλεια βάρους', 'Απώλεια όρεξης', 'Ωχρότητα', 
     'Επώδυνη σπλήνα', 'Ταχυκαρδία', 'Δύσπνοια','Γλωσσίτιδα','Πληγές', 
     'Ελλειπής διατροφή', 'πατερας_Στίγμα', 'πατερας_Μεσογειακή', 
     'μητερα_Στίγμα', 'μητερα_Μεσογειακή', 'Ιδιαίτερο'], 
     ElectricalHb = [HbA1,HbA2,HbS,HbF,Schema_RBC],  
     member('πατερας_Στίγμα', Symptoms); 
     member('μητερα_Στίγμα', Symptoms); 
     member('μητερα_Μεσογειακή', Symptoms); 
     member('πατερας_Μεσογειακή', Symptoms), 
     number(HbF),HbF>2,HbF<9, 
     number(HbA1), HbA1<1. 

check_B12_RBC([[Hlikia,Filo,Egkimosini],[WBC,RTC,MCV,RBC,FE,Ferritin,TIBC,Hct,Hb,PLT],[B12,Folic_acid,tSH,Kreatinin]],b12Low):- 
     (Filo='male',number(RBC),RBC>6); 
     (Filo='female',number(RBC),RBC>4.9), 
     number(B12), B12<130. 

check_Folic([B12,Folic_acid,tSH,Kreatinin],folic):- 
     number(Folic_acid), Folic_acid<3.1. 

的字節代碼文件

:- dynamic kb_da/4. 


kb_da(patient1,['Ιωάννης Ιωάννου','Φλέμινγκ3 71410 Ηράκλειο','281'], 
    [50,male,na],[['Πονοκέφαλος','Aδυναμία','Έλλειψη αυτοσυγκέντρωσης'],_,_,_]). 

    %Sidiropenik Anaimia 
kb_da(patient2, 
    ['Δημήτρης Παπαδημητρίου','Αρχαγγέλου 17 Κοκκινοτριμιθιά Λευκωσίας','0035797273515'], 
     [27,male,na], [['Πονοκέφαλος','Κούραση','Ταχυκαρδία','Δύσπνοια'], 
    [4800,1,75,4.3,45,18,280,33,12,125],_,_]). 

kb_da(patient3,['Δέσποινα Μπασδέκη','Πανός 19 71410 Ηράκλειο',6955457845],[24,female,no], 
     [['Πονοκέφαλος','Έλλειψη αυτοσυγκέντρωσης','Ελλειπής διατροφή','Δύσπνοια','Ταχυκαρδία'], 
     [4300,1,75,3.7,41,18,250,30,10,180],_,_]). 

kb_da(patient4,['Δήμητρα Περπερίδου','Καραμανώλη 5 55142 Θεσσαλονίκη',6977458521],[32,female,yes], 
     [['Πονοκέφαλος','Έλλειψη αυτοσυγκέντρωσης','Ελλειπής διατροφή','Δύσπνοια','Ταχυκαρδία','Ταχυκαρδία'], 
     [4800,1,72,3.7,50,15,280,32,10,180],_,_]). 

%Stigma Mesogeiaki Anaimia 

kb_da(patient5,['Manolis Manolaou','Epaminondos 24 55142 Θεσσαλονίκη',6985245125],[50,male,na], 
     [['Πονοκέφαλος','Δύσπνοια','Ταχυκαρδία','Ταχυκαρδία','μητερα_Στίγμα'], 
     [4800,1,78,7,45,15,320,39,13,125],_,_]).   

kb_da(patient6,['Manolis Pavlou','Venizelou 24 59100 Veroia',6977148545],[25,male,na], 
     [['Πονοκέφαλος','Δύσπνοια','Ταχυκαρδία','πατερας_Μεσογειακή',], 
     [4800,1,78,7.8,45,15,320,39,13,155],_,_]). 


kb_da(patient7,['Maria Papadopoulou','Venizelou 24 59100 Veroia',6985478452],[42,female,na], 
     [['Πονοκέφαλος','Δύσπνοια','Ταχυκαρδία','Ελλειπής διατροφή','μητερα_Μεσογειακή'], 
     [4800,1,78,7.8,45,15,320,39,13,155],_,_]). 


% Mesogeiaki Anaimia  

kb_da(patient8,['Μαρία Παπανικολάου','Βετσοπούλου 24 59100 Αλεξάνδρεια',6974582545],[42,female,no], 
     [['Πονοκέφαλος','Δύσπνοια','Αδυναμία','Ταχυκαρδία','Ελλειπής διατροφή','πατερας_Στίγμα','μητερα_Μεσογειακή','Ιδιαίτερη'], 
     [4800,1,85,5.5,45,22,320,39,13,155],_, 
     [3,hbA2,hbS,5,schema_RBC]]). 

kb_da(patient9,['Γεώργιος Παπαδήμου','Παπανικολάου 58 47854 Βόλος',6974585124],[85,male,na], 
     [['Πονοκέφαλος','Ωχρότητα','πατερας_Μεσογειακή','πατερας_Μεσογειακή','Ιδιαίτερο'], 
     [4800,1,85,5.5,45,22,320,39,13,155],_, 
     [3,hbA2,hbS,5,schema_RBC]]). 


kb_da(patient10,['Γεώργιος Καρανικόλας','Χαριλάου Τρικούπη 58 56954 Θεσσαλονίκη',6974585412],[45,male,na], 
     [['Πονοκέφαλος','Ωχρότητα','πατερας_Μεσογειακή','μητερα_Στίγμα','Ιδιαίτερη'], 
     [4400,1,75,5.5,45,22,320,39,13,125],_, 
     [4,hbA2,hbS,2,schema_RBC]]).   

%Β12 

kb_da(patient11,['Παναγιώτης Μπομπότης','Αιγαίου 3 17122 Ν.Σμύρνη Αττικης ',6974585123],[22,male,no], 
     [['Πονοκέφαλος','Ωχρότητα','Απώλεια βάρους','Απώλεια όρεξης'], 
     [4400,1,100,3.5,45,22,320,39,13,125], 
     [125,3.5,tSH,creatinine],_]).  



kb_da(patient12,['Δήμητρα Καρανικόλα','Χαριλάου Τρικούπη 58 56954 Θεσσαλονίκη',6974585412],[24,female,na], 
     [['Απώλεια βάρους','Απώλεια όρεξης'], 
     [4800,1,100,3.7,45,22,320,39,13,170], 
     [125,2,tSH,creatinine],_]).  

%Foliko O3i 


kb_da(patient13,['Κίμωνας Ιωαννίδης','Βρυλήσια Αττικής',6984575625],[65,male,no], 
     [['Απώλεια βάρους','Απώλεια όρεξης'], 
     [4800,1,100,5.5,45,22,320,39,13,170], 
     [125,2,tSH,creatinine],_]). 


kb_da(patient14,['Ιουλια Αναστασιάδου','Κουντουριωτη 3 54625 Θεσσαλονίκη',6958475202],[35,female,yes], 
     [['Απώλεια βάρους','Ωχρότητα','Απώλεια όρεξης'], 
     [4800,1,100,3.7,45,22,320,39,13,170], 
     [145,2,tSH,creatinine],_]). 

%Drepanokitarwsi 

kb_da(patient15,['Βασίλης Παπακωσταντίνου','Μητροπόλεως 18 74125 Ν. Ιωνία',6955447751],[35,male,no], 
     [['Απώλεια βάρους','Απώλεια όρεξης'], 
     [4800,2,100,3.7,45,22,320,39,13,170], 
     [hbA1,hbA2,1,hbF,'Δρεπάνι'],_]).  

kb_da(patient16,['Θοδωρής Onir','Καραμανλή 45 74125 Ν.Ιωνία',6977457845],[38,male,no], 
     [['Απώλεια βάρους','Ωχρότητα','Απώλεια όρεξης'], 
     [4400,2,100,3.7,45,22,320,39,13,170], 
     [hbA1,hbA2,2,hbF,'Δρεπάνι'],_]).    


%Σφαιροκυττάρωση 

kb_da(patient17,['Όλγα Σαμανίδου','Κηφισιάς 45 74125 Κηφισιά',6985544125],[29,female,yes], 
     [['Πονοκέφαλος','Δύσπνοια','Αδυναμία','Απώλεια βάρους','Ωχρότητα','Απώλεια όρεξης'], 
     [4900,2,100,3.2,45,28,320,39,13,120], 
     [hbA1,hbA2,0,hbF,'Σφαίρα'],_]). 


kb_da(patient18,['Σοφία Χατζηπαυλή','Γεωργίου Βλαστού 12 45785 Κώς',6974545455],[18,female,no], 
     [['Πονοκέφαλος','Αδυναμία','Ωχρότητα','Απώλεια όρεξης'], 
     [4900,2,100,3.2,45,28,320,39,13,170], 
     [hbA1,hbA2,0,hbF,'Σφαίρα'],_]). 

%Den iparxei provlima 

kb_da(patient19,['Βλάση Μπονάτσο','Παπαμιχαήλ 54 14585 Αθήνα',6985545212],[58,male,no], 
     [['Αδυναμία','Ωχρότητα','Απώλεια όρεξης'], 
     [4900,2,100,3.2,45,28,320,39,13,170], 
     [hbA1,hbA2,0,hbF,'Κανονικό'],_]). 

kb_da(patient20,['Μαρία Παπαμιχαήλ','Κονίτσης 54 59100 Βέροια',6984525154],[42,female,no], 
     [['Αδυναμία','Ωχρότητα','Απώλεια όρεξης'], 
     [4900,2,99,3.2,45,28,320,45,13,170], 
     [hbA1,hbA2,2,hbF,'Κανονικό'],_]).  
+0

其中之一,check_WBC_PLT中存在一個奇怪的析取。我調整了縮進以更好地向您顯示問題所在。 – false

+0

我運行的代碼與更改,但同樣的結果再次.. 你是什麼意思一個古怪的分解? –

+0

縮進應該說清楚:'數字(WBC),數字(PLT)'僅是第一個分離符的一部分。 – false

回答

3

這裏有一些言論。

1mo,始終採取警告系統認真生成並刪除它們。你有各種各樣的單變量變量,其中一些是有問題的,有些則不是。實際上,在規則check_HCT_Hb_FE中有FEFe

check_HCT_Hb_FE([[WBC,RTC,MCV,RBC,Fe,Ferritin,TIBC,Hct,Hb,PLT],[Hlikia,Filo,Egkimosini]],hctLow):- 
%         ^^ was FE 
     ( Filo='male', * ... 
     ; Filo='female',number(Hct),number(Hb),number(Fe), Hct<36,Hb<10,Fe<45 
     ; Filo='male', * ... 
     ). 

2do,我不清楚使用number/1有多大意義。像Fe<45這樣的算術謂詞正在測試一個有效值,並在出現錯誤時產生錯誤。

3tio,有一些奇怪的語法(否則無關)。搜索person6,]

4要,本地化的問題,我添加了以下幾行程序:

:- op(950, fy, *). 
*_. 

在這種情況下,因爲你說,缺鐵,預計這是很簡單的:

 
rule(kb_da(UserId,DataCom,PersData, 
    [Symptoms,FullBloodTest,SpecBloodTest,ElectricalHb]), Diagnosis) :- 
     * symptoms(Symptoms,symptPos), 
     * check_WBC_PLT(FullBloodTest,noPancytopenia), 
     * check_RTC(FullBloodTest,rtcLess2), 
     * check_MCV(FullBloodTest,mcvLow), 
     * checkFerritin(FullBloodTest,ferLow), 
     check_HCT_Hb_FE([FullBloodTest,PersData],hctLow), 
     * checkRBC([FullBloodTest,PersData],rbcLow), 
     Diagnosis = 'Iron Deficiency'. 

的高度概括的計劃已經失敗,所以很明顯,問題在該目標check_HCT_Hb_FE/2內,特別是失敗的目標是

check_HCT_Hb_FE([[4300,1,75,3.7,41,18,250,30,10,180],[24,female,no]],hctLow) 

但是,這三種情況Hct<36,Hb<10,Fe<45在這種情況下不是真的,事實上它們被實例化爲30<36,10<10,41<4510<10不成立。

+0

我如何使用這個op來本地化其他問題/ ?? –

+0

@DebbieMp:使用純粹的單調代碼,您可以在出現意外故障的任何程序中使用'*'。 – false

+0

有關此技術的更多示例 - 請查看右側給出的「鏈接」項目。你有這樣的例子的集合。 – false