The xset/3 predicate invokes one of the methods, the set-method. The intended meaning is that a field of the external data structure (indicated by Index) is set to the given Value. This setting qualifies as a side-effect (similar to writing to a file) and is not undone on backtracking. The details of how the index is interpreted and which values are allowed depend on the set-method supplied by external code.
/* C code with embedded ECLiPSe call, passing data via C ararys */
#include "eclipse.h"
#define N 5
double data_in[N] = {1.1,2.2,3.3,4.4,5.5};
double data_out[N];
main()
{
pword call;
int i;
ec_init();
ec_post_string("[my_code]");
ec_post_goal(
ec_term(ec_did("process", 3),
ec_long(N),
ec_handle(&ec_xt_double_arr, (t_ext_ptr) data_in),
ec_handle(&ec_xt_double_arr, (t_ext_ptr) data_out)
)
);
if (ec_resume() == PSUCCEED)
{
for (i=0; i<N; i++)
printf("%f,", data_out[i]);
}
ec_cleanup();
}
/* ECLiPSe code in file my_code.pl */
process(0, _, _) :- !.
process(N, In, Out) :-
N1 is N-1,
xget(In, N1, X),
Y is sqrt(X),
xset(Out, N1, Y),
process(N1, In, Out).
/* Sample run */
% main
1.048809,1.483240,1.816590,2.097618,2.345208,