2009-05-09 12 views
6

में गतिशील की घोषणा मैं Prolog में इस कोड है:एक विधेय gprolog

dynamic(player_at/1). 
player_at(house). 
goto(X) :- retract(player_at(house)), assert(player_at(X)). 

लेकिन मैं अभी भी यह त्रुटि प्राप्त:

uncaught exception: error(permission_error(modify,static_procedure,player_at/1),retract/1) 

जब मैं गोटो (foo) निष्पादित करें।

मैंने dynamic documentation पढ़ा है, लेकिन मुझे कम से कम gprolog में इसका उपयोग करने का तरीका नहीं पता है। क्या मैं कुछ भूल रहा हूँ?

:- dynamic(player_at/1). 

:- बिना लाइन विधेय dynamic/1 dreefine, बजाय मौजूदा dynamic विधेय को क्रियान्वित करने के होगा:

+0

अंततः आप पहले से ही अपने कार्यक्रम के परामर्श के दौरान एक अपवाद मिलना चाहिए। यह गतिशील (_) तथ्य की अनुमति नहीं देनी चाहिए। आईएसओ मानक केवल इतना कहता है कि गतिशील एक निर्देश है, लेकिन ज्यादातर प्रस्तावों में यह एक अंतर्निहित भी है, और इस प्रकार इसे एक तथ्य के रूप में नहीं माना जा सकता है। –

उत्तर

11

:- prepending द्वारा पहली पंक्ति को ठीक करें।

अन्य prolog कार्यान्वयन (लेकिन gprolog नहीं) के रूप में अच्छी तरह से इस समर्थन करते हैं:

:- dynamic player_at/1. 
+0

मैंने कोशिश की - मुझे वाक्यविन्यास त्रुटि मिलती है:। या ऑपरेटर अभिव्यक्ति के बाद उम्मीद की। यह एक कोष्ठक के बिना गतिशील पसंद नहीं है। – Kai

+0

मेरा जवाब फिक्स्ड। – pts

संबंधित मुद्दे