2016-12-31 11 views
7

यह मेरे कक्षा प्रश्न में से एक है।प्रोलॉग में पूरी तरह से घोषणा करने के लिए और कैसे परिवर्तित करें?

Question

मैं की अगर-बाकी लेकिन मुझे बताया गया था समूह के साथ अपने ही Prolog कार्यक्रम बनाने के लिए कर रहा था कि मेरे कार्यक्रम Prolog में बहुत नींव सिद्धांत की अपनी एक के रूप में पूरी तरह से कथात्मक नहीं है।

यहाँ मेरी कोड

%start with :- go. 
is_spicy :- 
    write('Do you want spicy? (yes/no)'), 
    read(Preference), 
    (Preference == yes -> recommend("Curry"); recommend("Kurma")). 

is_fry :- 
    write('Do you want fry food? (yes/no)'), 
    read(Preference), 
    (Preference == yes -> recommend("StirFry"); recommend("Chicken")). 

is_chili :- 
    write('Do you want chili? (yes/no)'), 
    read(Preference), 
    (Preference == yes -> recommend("Sambal"); recommend("Singgang")). 

recommend(Food) :- write('We recommend you '), write(Food). 

go :- 
    write('Which food type do you prefer? (indian, chinese, malay): '), 
    read(FoodType), 
    (
    FoodType == indian -> is_spicy; 
    FoodType == chinese -> is_fry; 
    FoodType == malay -> is_chili; 
    writeln('Please try again') 
). 

किसी को भी यह कैसे "पूरी तरह से कथात्मक" बनाने के लिए पर कोई विचार है है?

+1

बहुत सारे कैसे बनाने के लिए पता है कि यह पूरी तरह से 'declarative' है, क्योंकि यह होमवर्क आप दिखाना चाहिए क्या आप पहली बार कोशिश की है ताकि हम आपको केवल आपके जवाब देने के बजाय मदद कर सकते है। एक संकेत के रूप में देखें: [नियम] (https://www.doc.gold.ac.uk/~mas02gw/prolog_tutorial/prologpages/rules.html) –

+0

@GuyCoder मैं प्रोलॉग में नियमों को कैसे संरचित करता हूं उससे परिचित हूं लेकिन मुझे इस मामले में यह प्रतीत नहीं होता है। हाथ में समस्या उपयोगकर्ता से 2 निर्णय लेने के इनपुट की आवश्यकता है, एकमात्र दृष्टिकोण जो मैं सोच सकता हूं वह है कि मेरे कोड में अन्यथा शामिल किया जाए। –

उत्तर

4

यदि आप अपने कोड में अनावश्यकता को संबोधित करते हैं, तर्क से डेटा फैक्टर करते हैं, तो आप अधिक घोषणात्मक कोड के साथ समाप्त होते हैं।

तो, डेटा संरचना को एन्कोड करें, और प्रश्न पूछने में सक्षम 'दुभाषिया' प्रदान करें और परिणामों का अनुमान लगाएं।

उदाहरण के लिए

dt(food_type, 
    [indian -> dt(spicy, [ y -> curry, n -> curma ]) 
    ,chinese -> dt(fry, [ y -> stirFry, n -> chicken ]) 
    ,malay -> dt(chili, [ y -> sambal, n -> singgang ]) 
    ]). 

interpreter(dt(About, Choices), Choice) :- 
    % present a menu for choices 
    % recurse on selected path 

% when it reach a leaf, just unify 
interpreter(Choice, Choice). 

आप y/n केवल विकल्पों के लिए मेनू विशेषज्ञ कर सकते हैं, लेकिन यह

3

CapelliC एक जवाब है कि और अधिक परिष्कृत हो गया था, जो मुझे पसंद दिया आप पर निर्भर है क्योंकि मैंने अपने जवाब से कुछ भी सीखा।

यहां एक सरल संस्करण है जो बिंदुओं को जोड़ने में मदद कर सकता है।

यह चाल वांछित अंत परिणाम के बारे में सोचने के लिए व्यक्तिगत नियमों के सेट के रूप में सोचना था, उदाहरण के लिए food(indian,spicy) और फिर उन्हें कैसे प्राप्त करें। एक बार जब मैंने हां/नहीं से भिन्नताओं के मानों को बदल दिया तो बाकी पहाड़ी नीचे थीं। जाहिर है हां/नहीं इस्तेमाल किया जा सकता है, लेकिन उसे अतिरिक्त कोडिंग की आवश्यकता है। हम में से

food(indian) :- 
    write('Do you want spicy? (spicy/not_spicy)'), 
    read(Preference), 
    food(indian,Preference). 

food(chinese) :- 
    write('Do you want fry food? (fry/not_fry)'), 
    read(Preference), 
    food(chinese,Preference). 

food(malay) :- 
    write('Do you want chili? (chili/not_chili)'), 
    read(Preference), 
    food(malay,Preference). 

food(indian,spicy) :- recommend("Curry"). 
food(indian,not_spicy) :- recommend("Kurma"). 

food(chinese,fry) :- recommend("StirFry"). 
food(chinese,not_fry) :- recommend("Chicken"). 

food(malay,chili) :- recommend("Sambal"). 
food(malay,not_chili) :- recommend("Singgang"). 

recommend(Food) :- write('We recommend you '), write(Food). 

go :- 
    write('Which food type do you prefer? (indian, chinese, malay): '), 
    read(FoodType), 
    food(FoodType). 
संबंधित मुद्दे