Valerio wrote: > Hi, > I am using ECLiPSe to describe a large EFSM (Extended Finite State > Machine) which consists of 62 states and 141 transitions. > In the script there are two versions of the same machine, one is the > fault free version, the other is the faulty version. > I am using ECLiPSe to define the EFSM behaviour in terms of > constraints, in order to find a given input sequence which leads to > observe a difference between the outputs of the two versions. > However when I compile the ECLiPSe script I get the following error: > > *** syntax error: illegal head: do__0(_2257878, _2257878, DATABUS_I, ... > E136_F, E137_F, E138_F, E139_F, E140_F, E141_F) :- true, ! > before line 3432 in the file prawn-pc-4235-s34-s0.ecl > > out of range in set_flag(do__0 / 460, auxiliary, on) in module eclipse > syntax error : in source transformation in efsm(T, DATABUS_I, > INTERRUPT) :- ... You are exceeding the limit of 255 arguments for any predicate. Do-loops are implemented by generating an auxiliary predicate do__xxx, and every for/foreach/fromto/param etc gives rise to one or two arguments for this predicate, so you have too many of those. Admittedly, the do-loop implementation could be improved to work around that itself. But if you show me a sample source of your loop, i can suggest a way to rewrite it - generally, you will have to pack several arguments into one compound term, and pass that term instead of many arguments. However, let me make a more general point: I assume your complex code is generated, and there is probably no need to do that at all. So instead of: 1. generate symbolic constraints from the automaton description 2. write them to a file 3. compile the file 4. run the compiled code to set up the constraints you should just do 1. generate symbolic constraints from the automaton description, and call each one immediately to set it up. For example, instead of generating a file that contains generated_sorted_list_of_5([A,B,C,D,E]) :- A #< B, B #< C, C #< D, D #< E. you modify your generator to set up the constaints directly, i.e. generic_sorted_list_of_N(N, List) :- length(List, N), ( fromto(List, [X1,X2|Xs], Xs, [_]) do X1 #< X2 ). -- JoachimReceived on Thu Apr 10 2008 - 04:39:45 CEST
This archive was generated by hypermail 2.2.0 : Thu Feb 02 2012 - 02:31:58 CET