मुझे अपनी एआई कक्षा के लिए प्रोलॉग होमवर्क के साथ कुछ मदद की ज़रूरत है। सवाल आइंस्टीन की पहेली के लिए प्रोलॉग कोड लिखना है। मुझे पता है कि इसे खुद कैसे लिखना है, लेकिन होमवर्क में कुछ बाधाएं हैं।एन्स्टिन्स पहेली प्रोलॉग
there are 5 houses
the Englishman lives in the red house
the Spaniard owns the dog
coffee is drunk in the green house
the Ukrainian drinks tea
the green house is immediately to the right of the ivory house
the Old Gold smoker owns snails
Kools are smoked in the yellow house
milk is drunk in the middle house
the Norwegian lives in the first house
the man who smokes Chesterelds lives in the house next to the man with the fox
3 Kools are smoked in the house next to the house where the horse is kept
the Lucky Strike smoker drinks orange juice
the Japanese smokes Parliaments
the Norwegian lives next to the blue house
मुझे पता है कि मुझे घरों के लिए सूची का उपयोग करने की आवश्यकता है क्योंकि उन्हें आदेश दिया गया है। मैं घर की विशेषताओं के लिए भी सूची का उपयोग करना चाहता था लेकिन मुझे यहां एक समस्या मिली।
मैं अज्ञात चर घर (अंग्रेजी, लाल, _, _, _) का उपयोग करने जा रहा था। लेकिन मुझे नहीं पता कि होमवर्क के लिए इसका व्याख्या कैसे करें।
यहाँ की कमी कर रहे हैं: आप निम्नलिखित द्विआधारी विधेय प्रतीकों का उपयोग करना चाहिए:
owns(N,Pet)
smokes(N, Cigarette).
drinks(N, Drink).
उसके अलावा आप विधेय के किसी भी संख्या का उपयोग करने के लिए स्वतंत्र हैं।
यहाँकैसे मैं तथ्यों प्रारंभ लेकिन मुझे पता है कि इस मामले
next_to(X,Y) :- right_of(X,Y); right_of(Y,X).
owns(spaniard, dog).
drinks(ukrainian, tea).
smokes(japanese, parliaments).
right_of(ivory, green).
lives(englishman, red).
owns(X, snail) :- smokes(X, old_gold).
smokes(X, kools) :- owns(X, yellow).
smokes(X, lucky_strike) :- drinks(X, orange_juice).
drinks(X, coffee) :- owns(X, green_house).
यह भावना एक छोटा सा बना देता है, लेकिन यह एक ही समय में पूरी तरह से गलत लग रहा है में नियम बनाने के लिए न है। मुझे नहीं लगता कि मैं इस के साथ कहीं भी जा सकता हूं। :/
tbh, मुझे लगता है कि ये बाधाएं डेटा के इतने उपयुक्त प्रतिनिधित्व को लागू नहीं करती हैं और इसलिए परिणामस्वरूप अजीब/नहीं तो सुरुचिपूर्ण कोड होता है। मैंने अपने पहले ले पर समान भविष्यवाणियों का उपयोग किया लेकिन फ़ाइल को थोड़ा सा ट्रैश करने के बाद (अंतिम समाधान: [http://users.ntua.gr/el06009/files/zebra.pl])। वास्तव में उपयोगी टिप्पणी के लिए खेद है, बस यह कहना चाहता था कि, आईएमओ, ये बाधाएं वास्तव में खराब हैं:/ –
@ थानोसक्यूआर एक प्रोलॉग समाधान [यहां] (http://stackoverflow.com/a/8270393/849891) है। मुझे लगता है कि यह सुरुचिपूर्ण और अच्छा है। :) कुंजी निर्माण से 'diff' बाधा संतुष्ट * प्राप्त करने के लिए, डोमेन से एक साथ पारस्परिक-विशिष्ट विकल्प बनाने के लिए 'चयन' का उपयोग कर रही है *। –
@WillNess अच्छी तरह से, आप 'मालिक/2',' धूम्रपान/2' और 'पेय/2' का उपयोग नहीं कर रहे हैं, है ना? मैं वास्तव में यह नहीं कह रहा हूं कि आपके पास प्रोलॉग में एक सुरुचिपूर्ण समाधान नहीं हो सकता है (इसके विपरीत, मुझे लगता है कि मेरा समाधान तब तक बहुत ही सुरुचिपूर्ण है जब तक मैंने आपका देखा नहीं (उपर्युक्त लिंक टूटा हुआ है https://github.com/ thanosqr/side_projects/blob/master/zebra_puzzle.pl)), बस होमवर्क की बाधाओं को एक सुरुचिपूर्ण समाधान –