info-gnuprologjava
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Info-gnuprologjava] Problem on firing a query


From: Suman Roy
Subject: Re: [Info-gnuprologjava] Problem on firing a query
Date: Fri, 1 Jun 2012 15:25:06 +0530

Here is the prolog code

Thanks for all the help.

-------------------------------------------------------------------

system(system1).
accountingSupplier(accountingSupplier1).
accountingCustomer(accountingCustomer1).
sendFreightInvoice(sendFreightInvoice1).
receiveFreightInvoice(receiveFreightInvoice1).
dofulfillmentProcess(dofulfillmentProcess1).
dopaymentProcess(dopaymentProcess1).
dofreightBillingProcess(dofreightBillingProcess1).
document(freightInvoice1).

raiseDoc(accountingSupplier1,freightInvoice1).
relDocAgent(freightInvoice1,accountingSupplier1).
relDocAgent(freightInvoice1,accountingCustomer1).

process(fulfillmentProcess1).
process(freightBillingProcess1).
process(paymentProcess1).



qualified(system1,dofulfillmentProcess1).
qualified(accountingSupplier1,dofreightBillingProcess1).
qualified(accountingCustomer1,dofreightBillingProcess1).
qualified(system1,dopaymentProcess1).
qualified(system1,dofreightBillingProcess1).
qualified(accountingSupplier1,sendFreightInvoice1).
qualified(accountingCustomer1,receiveFreightInvoice1).

agent(X):-system(X).
agent(X):-accountingSupplier(X).
agent(X):-accountingCustomer(X).

activity(X):-sendFreightInvoice(X).
activity(X):-receiveFreightInvoice(X).
activity(X):-dofulfillmentProcess(X).
activity(X):-dopaymentProcess(X).
activity(X):-dofreightBillingProcess(X).


holds_at(P,T,H):-initiates(E,P),happens3(E,T1,H),T1<T,
        not( terminated_between(P,T1,T,H) ).

terminated_between(P,T1,T2,H):-terminates(E,P),happens3(E,T,H),T1=<T,T=<T2.

happens3(start(A),T,H):-member(happens(start(A),T),H).
happens3(end(A),T2,H):-happens3(start(A),T1,H),dur(A,Y),T2 is T1+Y.

step(happens(start(A),T),H):-sequential(A0,A),happens3(end(A0),T,H),
        not( happens3(start(A),T,H) ). 

history([happens(start(dofulfillmentProcess1),-1)]).
history([Happens|H]):-history(H),step(Happens,H).

limited_history( [happens(start(dofulfillmentProcess1),-1)], N ) :- 0<N.
limited_history( [Happens|H], N ) :- 1<N, N1 is N-1,
        limited_history( H, N1 ),
        step(Happens,H).


initiates(end(dofulfillmentProcess1),initiationfreightBillingProcess).


initiates(start(dopaymentProcess1),closurefreightBillingProcess).

dur(dofulfillmentProcess1,0).
dur(dopaymentProcess1,2).
dur( sendFreightInvoice1, 1 ).
dur( receiveFreightInvoice1, 1 ).

sequential(dofulfillmentProcess1,sendFreightInvoice1).
sequential(sendFreightInvoice1,receiveFreightInvoice1).
sequential(receiveFreightInvoice1,dopaymentProcess1).

terminates( a, a ).


------------------------------------------------------------

Suman Roy, Ph.D.
Infosys LABS, 
Infosys Technologies Ltd.,
Bangalore, India.     
Mob. +91 98860 23203 



-----Original Message-----
From: Daniel Thomas [mailto:address@hidden 
Sent: Friday, June 01, 2012 2:38 PM
To: Jagadish Koneti
Cc: Suman Roy; address@hidden
Subject: RE: [Info-gnuprologjava] Problem on firing a query

Since I don't have the prolog file which defines the limited_history predicate 
when I try to run the code you sent me I get an existence error because the 
predicate is not defined. (the meaning of existence_error is defined in the 
prolog standard)

If you switch your runOnce for a prepareGoal and then execute then you will get 
the actual correct error rather than an unhelpful one.

Daniel

On Fri, 2012-06-01 at 08:59 +0000, Jagadish Koneti wrote:
> Hello ,
> 
>  Thank you for the reply . can you please elaborate on what exactly " 
> error(existence_error(procedure,limited_history / 2),error) " implies ? . we 
> have understood that limited_history is a 2 array predicate but we are unable 
> to comprehend more than that .
> 
> 
> Thanks
> Jagadish koneti
> Infosys , Bangalore . 
> 
> 
> 
> -----Original Message-----
> From: address@hidden 
> [mailto:address@hidden
> ] On Behalf Of Daniel Thomas
> Sent: Thursday, May 31, 2012 2:10 AM
> To: Suman Roy
> Cc: address@hidden
> Subject: Re: [Info-gnuprologjava] Problem on firing a query
> 
> So this is the runOnce causing unhelpful error messages problem again. 
> 
> Also:
> >            catch (Exception e) {
> > 
> >                   System.out.println("fail");
> > 
> >             }
> Is bad practice and very unhelpful for debugging.
> 
> After fixing that and using prepareGoal and then execute.
> 
> gnu.prolog.vm.PrologException:
> error(existence_error(procedure,limited_history / 2),error)
>       at gnu.prolog.vm.PrologException.getError(PrologException.java:129)
>       at gnu.prolog.vm.PrologException.getError(PrologException.java:118)
>       at
> gnu.prolog.vm.PrologException.existenceError(PrologException.java:155)
>       at
> gnu.prolog.vm.UndefinedPredicateCode.execute(UndefinedPredicateCode.java:62)
>       at
> gnu.prolog.vm.interpreter.InterpretedByteCode.execute(InterpretedByteCode.java:522)
>       at
> gnu.prolog.vm.interpreter.Predicate_call.staticExecute(Predicate_call.java:144)
>       at gnu.prolog.vm.Interpreter.execute(Interpreter.java:507)
>       at Fresh_06.main(Fresh_06.java:74)
> 
> Which makes it fairly clear as to what the problem is.
> 
> You might get a different error as "D:/RSAE/latest-rule_11.pl" might exist on 
> your computer.
> 
> I hope that helps,
> 
> Daniel
> 
> On Mon, 2012-05-28 at 16:44 +0530, Suman Roy wrote:
> > Hi,
> > 
> >  
> > 
> > We are using the following code to generate the query
> > 
> >  
> > 
> > “limited_history(H,5),happens3(end(dofulfillmentProcess1),_,H).”
> > 
> >  
> > 
> > This has to be fired on prolog rules (attached) written for business 
> > artifact. However, when this query is fired through gnuprolog java 
> > JAR file, it is showing that
> > 
> > “the current goal is not active’.
> > 
> >  
> > 
> > But this query works fine when we fire them directly to prolog!
> > 
> >  
> > 
> > Can you please tell us what is the problem?
> > 
> >  
> > 
> > Thanks and regards,
> > 
> > --Suman
> > 
> >  
> > 
> >  
> > 
> > ====================================
> > 
> >  
> > 
> >  
> > 
> > package RSAE.util;
> > 
> >  
> > 
> > import gnu.prolog.term.AtomTerm;
> > 
> > import gnu.prolog.term.CompoundTerm;
> > 
> > import gnu.prolog.term.CompoundTermTag;
> > 
> > import gnu.prolog.term.IntegerTerm;
> > 
> > import gnu.prolog.term.Term;
> > 
> > import gnu.prolog.term.VariableTerm;
> > 
> > import gnu.prolog.vm.Environment;
> > 
> > import gnu.prolog.vm.Interpreter;
> > 
> > import gnu.prolog.vm.PrologCode;
> > 
> >  
> > 
> > public class Fresh_06 {
> > 
> >  
> > 
> >       public static void main(String[] args) {
> > 
> >  
> > 
> >             
> > 
> >            
> > 
> > //limited_history(H,5),happens3(end(dofulfillmentProcess1),_,H).
> > 
> >             try {
> > 
> >                   VariableTerm H = new VariableTerm();
> > 
> >                   gnu.prolog.vm.Environment gve = new Environment();
> > 
> > 
> > gve.ensureLoaded(AtomTerm.get("D:/RSAE/latest-rule_11.pl"));
> > 
> >                   Interpreter in = gve.createInterpreter();
> > 
> >                   gve.runInitialization(in);
> > 
> >                   
> > 
> >                   
> > 
> >                   Term lHistory[] = { H, new IntegerTerm(5) };
> > 
> >                   CompoundTerm lTerm = new 
> > CompoundTerm("limited_history", lHistory);
> > 
> >                   //replace with process code works
> > 
> >                   Term t1[] = { AtomTerm.get("sendFreightInvoice1") 
> > };
> > 
> >                   CompoundTerm cTerm2 = new CompoundTerm(",", 2);
> > 
> >                   CompoundTerm ct1 = new CompoundTerm("end", t1);
> > 
> >                   CompoundTerm gTerm1 = new 
> > CompoundTerm(CompoundTermTag.get(
> > 
> >                               "happens3", 3), ct1, new 
> > VariableTerm(), H);
> > 
> >  
> > 
> >                   cTerm2.args[0] = lTerm;
> > 
> >                   cTerm2.args[1] = gTerm1;
> > 
> >                   int rc = in.runOnce(cTerm2);
> > 
> >  
> > 
> >                   if (rc == PrologCode.SUCCESS || rc ==
> > PrologCode.SUCCESS_LAST) {
> > 
> > System.out.println("success");
> > 
> >                   }
> > 
> >             }
> > 
> >  
> > 
> >             catch (Exception e) {
> > 
> >                   System.out.println("fail");
> > 
> >             }
> > 
> >       }
> > 
> > }
> > 
> >  
> > 
> > ========================================
> > 
> >  
> > 
> > 
> > **************** CAUTION - Disclaimer ***************** This e-mail 
> > contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended solely for 
> > the use of the addressee(s). If you are not the intended recipient, 
> > please notify the sender by e-mail and delete the original message.
> > Further, you are not to copy, disclose, or distribute this e-mail or 
> > its contents to any other person and any such actions are unlawful.
> > This e-mail may contain viruses. Infosys has taken every reasonable 
> > precaution to minimize this risk, but is not liable for any damage 
> > you may sustain as a result of any virus in this e-mail. You should 
> > carry out your own virus checks before opening the e-mail or attachment.
> > Infosys reserves the right to monitor and review the content of all 
> > messages sent to or from this e-mail address. Messages sent to or from this 
> > e-mail address may be stored on the Infosys e-mail system.
> > ***INFOSYS******** End of Disclaimer ********INFOSYS***
> 


reply via email to

[Prev in Thread] Current Thread [Next in Thread]