On Sat, 2020-07-25 at 13:35 +0200, Domingo Alvarez Duarte wrote:
Hello !
Trying to change the actual TUPLE structure by:
====
#ifndef TUPLE_SIZE_T
#define TUPLE_SIZE_T int
#endif
struct TUPLE
{
TUPLE_SIZE_T size;
TUPLE_SIZE_T refcount;
SYMBOL sym[1];
/* symbol, which the component refers to; cannot be NULL */
};
====
I found the code bellow (in src/mpl/mpl3.c) that I'm not sure I
understand it,
it seems that it's only testing the last tuple against
"code->arg.arg.y", shouldn't it be testing inside the loop for every
tuple ?
I would appreciate someone could help understand this code !
====
int is_member(MPL *mpl, CODE *code, const TUPLE *tuple)
{ int value;
...
case O_CROSS:
{ int j;
value = is_member(mpl, code->arg.arg.x, tuple);
if (value)
{ for (j = 1; j <= code->arg.arg.x->dim; j++)
{ xassert(tuple != NULL);
tuple = tuple->next;
}
value = is_member(mpl, code->arg.arg.y, tuple);
}
}
break;
====
Cheers !
The routine is_member checks if the given n-tuple (specified by
'tuple') is a member of the given set (specified by 'code'). The check
is performed recursively by traversing the set expression tree. For
example, on evaluating the condition "... (x,y) in X cross Y ..." the
routine will check that x is in X and y is in Y.