2017-11-18 175 views

回答

5

純  Prolog的,沒有任何參數謂詞可以成功或失敗(或不終止 全部)。

因此,它只能編碼很少的信息。一個總是成功的謂詞已經可用:true/0,有零個 參數。總是失敗的謂詞也已可用:false/0,也有零個 參數。一個謂詞從來沒有 終止可以很容易地構建。因此,從這個意義上說,你不需要更多的謂詞和零參數,我認爲你完全有理由懷疑這樣的謂詞。

具有零參數的謂詞使用有限,因爲它們如此特殊。然而,它們可能用於描述固定的一組測試,或者僅用於它們的副作用。這也是你正在使用的,通過在終端發出輸出以防止謂詞成功。

這意味着您將離開Prolog的純子集,現在依賴於超出純邏輯的功能。

這通常是一個非常糟糕的主意,因爲它:

  • 阻止或至少約程序推理的多種形式
  • 使得它更難測試謂詞
  • 複雜
  • 不是線程 一般安全

因此,如下假設你寫你的程序:

 
cancer(Patient):- 
     patient_pain(Patient, strong), 
     patient_mood(Patient, depressed), 
     patient_fever(Patient, mild), 
     patient_bowel(Patient, bloody), 
     patient_miscellaneous(Patient, giddy). 

現在這個謂詞是由病人蔘數化,從而顯著比你貼什麼比較一般。

現在可以用來推理幾個病人,它可以用來在 並行對不同患者道理,你可以使用一個Prolog的 查詢測試謂語等

您可以通過定義例如patient_diagnosis/2來進一步概括謂詞,使所有內容都完全純粹,並從上述優勢中受益。請注意,患者可能有幾種疾病,可通過回溯發射。

因此:,沒有參數的規則在您的實際 代碼中至少出現可疑和非典型的情況。除了「測試 案例」和「一致性 檢查」等方案外,它只能用於其副作用,並且我建議您儘可能避免副作用。

有關此主題的更多信息,請參閱

4

cancer()是不合法的語法,但這個想法非常好。

只是做的呼叫作爲

cancer 

,並把它定義爲一個事實或規則。

cancer. % fact 

cancer :- blah blah %rule 

其實,你使用的系統謂語用在你的程序無參數 -

nl是謂詞總是成功,並打印一個換行符。

有很多理由沒有參數的謂詞。假設您有一臺服務器在生產中的配置與開發中的稍有不同。開發者訪問API已停產。如果我們在開發環境

,或者你可能有副作用襯托,或使用狀態是

my_handler(Request) :- 
     development, 
     blah blah 

發展才能成功。