我正在處理的應用程序是各種「配置器」。它是用C#編寫的,我甚至寫了一個規則引擎來處理它。這個想法是,有一堆命題邏輯陳述,用戶可以做出選擇。根據他們選擇的內容,其他一些項目將變爲必需或完全不可用。Prolog初學者 - 這是一個壞主意嗎?
命題邏輯語句通常採取以下形式:
A => ~X
ABC => ~(X+Y)
A+B => Q
A(~(B+C)) => ~Q A <=> B
的符號:
=> -- Implication
<=> -- Material Equivalence
~ -- Not
+ -- Or
Two letters side-by-side -- And
我很新的序言,但似乎它可能是能夠處理所有對我來說「規則處理」,允許我擺脫當前的規則引擎(它可以工作,但並不像我想的那樣快速或容易維護)。
此外,所有可用選項都屬於層次結構。例如:
Outside
Color
Red
Blue
Green
Material
Wood
Metal
如果在第二級(特徵,諸如顏色)的項目是隱含的,然後在第三級(選項,如紅色)的項目必須被選擇。同樣,如果我們知道一個功能是錯誤的,那麼它下面的所有選項也是錯誤的。
問題在於每個產品都有自己的一套規則。建立一個包含這些運算符作爲謂詞的知識庫是否合理,然後在運行時開始建立產品的所有規則?
我想象它可能會工作的方式是設置組件,功能和選項的想法。然後建立之間的關係(例如,如果該功能爲false,則其所有選項均爲false)。在運行時,添加產品的特定規則。然後將所有用戶的選擇傳遞給一個函數,將其作爲輸出檢索哪些項是真的,哪些項是假的。
我不知道我所問的所有問題,因爲我剛剛進入Prolog,但我正試圖避免走上不利的道路,並浪費大量時間。
一些問題,這可能有助於針對什麼,我試圖找出:
- 這聽起來做,能?
- 我吠叫錯了樹嗎?
- 嘗試在運行時創建所有這些規則是否有任何缺點或顧慮?
- 有沒有更好的系統可以讓我擠進一個C#應用程序(準確地說是Silverlight)?
- 我應該檢查其他競爭系統嗎?
- 你有關於這種事情的一般建議嗎?
在此先感謝您的建議!
我會改變這個問題的標題,以便它包含短語「產品配置」或一些這樣的。你自己寫「抓住每個產品都有自己的一套規則」,所以我認爲你對這個領域比對一般邏輯更感興趣。 –