簡體   English   中英

規則在prolog程序中排序

[英]rules order in a prolog program

我是一名大學生,正在從事AI項目,我們需要使用prolog設計一個程序。

我們是一個初學者,所以它將是一個非常基本的程序,我們不需要設計任何接口或類似的東西。

這個程序的想法是,它將向用戶顯示一些成分(日記,肉,奶酪等),並在用戶選擇他們想要的成分后,程序將建議可以使用所選成分制作的配方。

我想說,到目前為止我們采取的是規則,循環,條件,列表......等等。

我們只想知道如何訂購規則和東西以使其工作?

提前致謝!

我們想知道我們如何訂購規則和東西以使其有效?

在開始討論問題之前,我們先介紹一些使用筆和紙的人可能會使用的簡單想法,然后將其調整為與Prolog一起使用。

對於這個問題,我們將認為配方只是成分的集合,而不是如何准備成分的說明。

這里有一些簡單的食譜:

tacos - shells, ground beef, spices, lettuce, cheese
steak - steak, spices
spaghetti -ground beef, spaghetti noodles, tomato sauce, spices

現在,如果我們有porkspices我們就無法制作食譜。 如果我們有steakspices我們可以做牛排。 所以,讓我們在Prolog中做到這一點

為食譜做一個事實:

recipe(steak, steak, spices).

和一個查詢,看看我們是否可以制作食譜:

?- recipe(X, steak, spices).
X = steak.

現在別人嘗試了

?- recipe(X, spices, steak).
false.

顯然有些東西不起作用。 根據經驗,我知道問題是我們沒有使用規范形式 對於這個問題,如果我們只是對食譜的成分進行分類,然后確保對quires的成分進行分類,那么它將比較規范形式並解決問題。 此外,如果我們將成分轉換為列表,我們可以使用內置謂詞進行排序( sort / 2 ),例如

?- sort([steak, spices],I).
I = [spices, steak].

?- sort([spices, steak],I).
I = [spices, steak].

現在使用規范形式和成分作為列表,我們得到一個食譜

recipe(steak, [spices, steak]).

並進行查詢,對我們得到的輸入成分進行排序

can_make(I,R) :-
    sort(I,Is),
    recipe(R,Is).

?- can_make([steak,spices],R).
R = steak.

?- can_make([spices,steak],R).
R = steak.

添加新食譜應該很容易:

recipe(tacos, [cheese, ground_beef, lettece, shells, spices]).
recipe(spaghetti, [gound_beef, spaghetti_noddles, spices, tomato_sauce]).

並快速檢查

?- can_make([tomato_sauce, gound_beef, spices, spaghetti_noddles], R).
R = spaghetti.

?- can_make([spices,pork],R).
false.

這應該讓你開始。 希望我沒有給你完整的答案,因為它是家庭作業,你應該有一些東西需要解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM