2016-03-19 16 views
-2

MerhabaÜniversite için bir ödev yapıyorum. Prolog programımın 1 sözdizimi hatası C150 var. Sözdizimini nasıl ayıklar ve bilgi tabanını sorgularım?

How do you query prolog? I also keep getting 1 syntax error. 

Eğer

Honora Günü

predicates. 
    wife : -female(Y). 
    daughter : -female(Y). 
    son : -male (X). 
    wife (Mum). :-female(Y). 
wife (Kydd). :-female(Y). 
wife (Elizabeth). :-female(Y) parents (George, Mum). 
    wife (Sarah). :-female(Y). 
    wife (Anne). :-female(Y) parents (Phillip, Elizabeth). 
wife (Diana). :-female(Y) parents (Spencer, Kydd). 
daughter (Zara). :-female(Y) parents (Mark, Anne). 
daughter (Beatrice). :-female(Y) parents (Andrew, Sarah). 
    son (Charles). :-male(X) parents (Phillip, Anne). 
    son (Andrew). :-male(X) parents (Phillip, Elizabeth) . 
    son (Edward). :-male(X) parents (Phillip, Elizabeth) . 
son (William). :-male(X) parents (Charles, Diane). 
son (Harry). :-male(X) parents (Charles, Diane). 
    son (Peter). :-male(X) parents (Mark, Anne). 
    son (Eugenie). :-male(X) parents (Andrew, Sarah). 
    brother(X, Y). :- male (X). 
    parents (Pa, Ma, X). 
    parents (Pa, Ma, Y). 
    wife (Mum). 
    wife (Kydd). 
    wife (Elizabeth). 
    wife (Sarah). 
    wife (Anne). 
    wife (Diana). 
    daughter (Zara). 
    daughter (Beatrice). 
    son (Charles). 
    son (Andrew). 
    son (Edward). 
    son (William). 
    son (Harry). 
    son (Peter). 
    son (Eugenie). 

    goal 

r) Aşağıdaki sorular bunu sorarak Prolog programı test ederiz. Bazı durumlarda, aynı cevabı bir sorgu için bir kereden fazla almaktan kaçınmak mümkün olmayabilir. i) Sarah'ın kocası kimdir? ii) Elizabeth'in torunları kimlerdir? iii) Zara'nın büyük büyükbabaları kimlerdir? iv) Diana’nın kızkardeşi kimlerdir? v) Beatrice’in amcaları kim? Sorgunuzu ve programın yanıtlarını gösteren bir çıktı ekleyin (bunu basitçe SWI-Prolog’un ana penceresinden kopyalayabilirsiniz).

+0

Bu ne tür bir Prolog? Bu ne SWI ne de PDC. – false

cevap

0

Calculus'u önceden tanımlamak için de yeni biriyim, fakat benim küçük bilgime göre, sizin tahminçileriniz ilk soru için bir soruya cevap veriyorlar: i) Sarah'ın kocası kimdir? ve senin tahminlerin içinde: -kadın (Y) ebeveynler (Andrew, Sarah). Oğlu (Charles). Andrew ve Sarah olan Charles ebeveynleri hakkında bilgi veren. o zaman Sarah Andrew karısı olacak ve Andrew kocası olacak. Daha fazla bilgi için bu yardımcı olabileceğini umarız

0

Öncelikle, kodunuzu SO üzerinde nasıl biçimlendireceğinizi açıklayan this sorusuna bakın.

Belirttiğiniz kodla gerçekten çalışamıyoruz, size ödevinizin neyle ilgili olduğunu gösteren küçük bir örnek vereyim. Oradan neyi değiştirmen gerektiğini anlayabilmelisin.

parent(bill,grandpa_bills). % Grandpa_bills is the father of Bill 
parent(billy_the_kid,bill). % Bill is the father of billy_the_kid 

(. Prolog değişken adları için büyük harfli kelimeleri kullanır çünkü biz büyük harflerle isimlerini yazmak unutmayın)

Akabinde biz tanımlayabiliriz:

Biz şu Prolog gerçekleri dikkate büyükbaba veya büyükbaba kavramı. Büyükbaba, çocuk olan biri ve bu çocukların da kendi çocukları var. Biz çok kolay bu yazabilirsiniz:

grandparent(X,GrandParent) :- 
    parent(X,Parent),     % X has a parent 
    parent(Parent,GrandParent).  % and that parent also has a parent 

Şimdi Prolog sorabilirsiniz: İkinci sorguda
?- grandparent(jezus,Y). 
    false       % There is no fact present about jezus 

?- grandparent(X,Y). 
    X = billy_the_kid, 
    Y = grandpa_bills 

, biz Prolog birleşmesi gücünü göstermektedir. Prolog'dan her X ve büyükbaba/2'nin bedeni için her Y'yi bulmasını istiyoruz. Bu durumda, bu sadece billy_the_kid ve grandpa_bills içindir, ancak gerçekler kümenizi genişletip daha fazla kişi eklediğinizde, bu sorgu büyükbaba/2'nin başarılı olduğu tüm sonuçları (ayrı olarak) döndürür.

Daha fazla bilgi için, this eğitim sayfasına göz atın.