在純 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
來進一步概括謂詞,使所有內容都完全純粹,並從上述優勢中受益。請注意,患者可能有幾種疾病,可通過回溯發射。
因此:是,沒有參數的規則在您的實際 代碼中至少出現可疑和非典型的情況。除了「測試 案例」和「一致性 檢查」等方案外,它只能用於其副作用,並且我建議您儘可能避免副作用。
有關此主題的更多信息,請參閱logical-purity。
來源
2017-11-18 10:13:05
mat