| 1 | % evaluate ProB AST sequence expressions | |
| 2 | ||
| 3 | % returns indexed avl_set | |
| 4 | seqint_avl(Expression,avl_set(AVL)) :- | |
| 5 | seqint(Expression,Value) , | |
| 6 | gen_indexed_couple_list(1,Value,CoupleList) , | |
| 7 | findall(Key-true,member(Key,CoupleList),AVLList) , | |
| 8 | list_to_avl(AVLList,AVL). | |
| 9 | ||
| 10 | seqint(b(value(Seq),seq(_),_),Seq) :- | |
| 11 | is_list(Seq). | |
| 12 | ||
| 13 | seqint(b(value(avl_set(Seq)),seq(_),_),Value) :- | |
| 14 | avl_to_list(Seq,List) , | |
| 15 | findall(Key,member(Key-true,List),Value). | |
| 16 | ||
| 17 | seqint(b(sequence_extension([Seq]),seq(seq(_)),_),[Value]) :- | |
| 18 | seqint(Seq,Value). | |
| 19 | ||
| 20 | seqint(b(sequence_extension(Set),seq(_),_),Value) :- | |
| 21 | maplist(ast_to_prob_value,Set,Value). | |
| 22 | ||
| 23 | seqint(b(general_concat(SeqOfSeq),seq(_),_),Value) :- | |
| 24 | seqint(SeqOfSeq,Temp) , | |
| 25 | flatten(Temp,Value). | |
| 26 | ||
| 27 | seqint(b(front(Seq),seq(_),_),Value) :- | |
| 28 | seqint(Seq,Temp) , | |
| 29 | remove_last(Temp,Value). | |
| 30 | ||
| 31 | seqint(b(tail(Seq),seq(_),_),Value) :- | |
| 32 | seqint(Seq,[_|Value]). | |
| 33 | ||
| 34 | seqint(b(rev(Seq),seq(_),_),Value) :- | |
| 35 | seqint(Seq,Temp) , | |
| 36 | reverse(Temp,Value). | |
| 37 | ||
| 38 | seqint(b(restrict_front(Seq,RestrictBy),seq(_),_),Value) :- | |
| 39 | seqint(Seq,Temp) , | |
| 40 | int(RestrictBy,RestrictValue) , | |
| 41 | get_first_n(Temp,RestrictValue,Value). | |
| 42 | ||
| 43 | seqint(b(restrict_tail(Seq,RestrictBy),seq(_),_),Value) :- | |
| 44 | seqint(Seq,Temp) , | |
| 45 | int(RestrictBy,RestrictValue) , | |
| 46 | rem_first_n(Temp,RestrictValue,Value). | |
| 47 | ||
| 48 | seqint(b(concat(Seq1,Seq2),seq(_),_),Value) :- | |
| 49 | seqint(Seq1,ValueSeq1) , | |
| 50 | seqint(Seq2,ValueSeq2) , | |
| 51 | append(ValueSeq1,ValueSeq2,Value). | |
| 52 | ||
| 53 | seqint(b(insert_tail(Val,Seq),seq(_),_),Value) :- | |
| 54 | sint(Val,Insert) , | |
| 55 | seqint(Seq,ValueSeq) , | |
| 56 | ( Insert = true -> NInsert = [pred_true] | |
| 57 | ; Insert = false -> NInsert = [pred_false] | |
| 58 | ; NInsert = [Insert]) , | |
| 59 | append(NInsert,ValueSeq,Value). | |
| 60 | ||
| 61 | seqint(b(insert_front(Seq,Val),seq(_),_),Value) :- | |
| 62 | sint(Val,Insert) , | |
| 63 | seqint(Seq,ValueSeq) , | |
| 64 | ( Insert = true -> NInsert = [pred_true] | |
| 65 | ; Insert = false -> NInsert = [pred_false] | |
| 66 | ; NInsert = [Insert]) , | |
| 67 | append(ValueSeq,NInsert,Value). | |
| 68 | ||
| 69 | % return the first n elements of a list | |
| 70 | get_first_n([],_,[]). | |
| 71 | get_first_n(_,0,[]). | |
| 72 | get_first_n([H|T],N,[H|NT]) :- | |
| 73 | N1 is N - 1 , | |
| 74 | get_first_n(T,N1,NT). | |
| 75 | ||
| 76 | % removes the first n elements of a list | |
| 77 | rem_first_n([],_,[]). | |
| 78 | rem_first_n(L,0,L). | |
| 79 | rem_first_n([_|T],N,NL) :- | |
| 80 | N1 is N - 1 , | |
| 81 | rem_first_n(T,N1,NL). |