fix foreach

This commit is contained in:
Vítor Santos Costa 2015-03-04 09:59:05 +00:00
parent 9b6bcdde16
commit 5b19e9546a

View File

@ -26,7 +26,7 @@ arrays. these arrays are allocated in the stack, and disppear in
backtracking. Matrices are available by loading the library
`library(matrix)`. They are multimensional objects of type:
+ <tt>terms</tt>: Prolog terms
+ <tt>terms</tt>: Prolog terms
+ <tt>ints</tt>: bounded integers, represented as an opaque term. The
maximum integer depends on hardware, but should be obtained from the
@ -39,7 +39,7 @@ predicate or through an <tt>R</tt>-inspired access notation (that uses the ciao
style extension to `[]`). Examples include:
+ Access the second row, third column of matrix <tt>X</tt>. Indices start from
+ Access the second row, third column of matrix <tt>X</tt>. Indices start from
`0`,
~~~~
_E_ <== _X_[2,3]
@ -809,23 +809,23 @@ index(I..J, _M, [I|O] ) :- !,
index(I:J, _M, [I|O] ) :- !,
I1 is I, J1 is J,
once( foldl(inc, O, I1, J1) ).
index(I+J, _M, O ) :- !,
index(I+J, M, O ) :- !,
index(I, M, I1),
index(J, M, J1),
add_index(I1, J1, O).
index(I-J, _M, O ) :- !,
index(I-J, M, O ) :- !,
index(I, M, I1),
index(J, M, J1),
sub_index(I1, J1, O).
index(I*J, _M, O ) :- !,
index(I*J, M, O ) :- !,
index(I, M, I1),
index(J, M, J1),
O is I1*J1.
index(I div J, _M, O ) :- !,
index(I div J, M, O ) :- !,
index(I, M, I1),
index(J, M, J1),
O is I1 div J1.
index(I rem J, _M, O ) :- !,
index(I rem J, M, O ) :- !,
index(I, M, I1),
index(J, M, J1),
O is I1 rem J1.
@ -1363,15 +1363,15 @@ iterate( V in A..B, Cont, LocalVars, Goal, Vs, Bs, Inp, Out) :-
var(V),
eval(A, Vs, Bs, NA),
eval(B, Vs, Bs, NB),
( NA > NB -> Inp = Out ;
( NA > NB -> Inp = Out ;
A1 is NA+1,
(Cont = [H|L] ->
iterate( H, L, LocalVars, Goal, [V|Vs], [NA|Bs], Inp, Mid )
;
iterate( [], [], LocalVars, Goal, [V|Vs], [NA|Bs], Inp, Mid )
),
iterate( V in A1..NB, Cont, LocalVars, Goal, Vs, Bs, Mid, Out )
).
iterate( V in A1..NB, Cont, LocalVars, Goal, Vs, Bs, Mid, Out )
).
eval(I, _Vs, _Bs, I) :- integer(I), !.
@ -1387,4 +1387,3 @@ ints(A,B,O) :-
( A > B -> O = [] ; O = [A|L], A1 is A+1, ints(A1,B,L) ).
zero(_, 0).