Dear all, I am sure I am missing something but I don't know what. After a quite long debugging session, I have the following fragment in my C++ code: prolog_term x = p2p_new(); if (is_var(x) == FALSE) abort(); // This statement does not get executed. if (c2p_list(x) == FALSE) abort(); // This statement does not get executed. // Hey, how can `x' still be a variable? if (is_var(x) == TRUE) abort(); // This statement IS executed. `x' is initialized to a fresh variable (so that the first call to abort() is not executed), then the call to c2p_list() is successful (so that the second call to abort() is not executed), but afterwards `x' is still bound to a variable (and the third call to abort() is executed). Any idea why that happens? All the best Roberto P.S. I am using XSB 2.5 $ xsb [xsb_configuration loaded] [sysinitrc loaded] [packaging loaded] XSB Version 2.5 (Okocim) of March 11, 2002 [i686-pc-linux-gnu; mode: optimal; engine: slg-wam; gc: indirection; scheduling: local] | ?- -- Prof. Roberto Bagnara Computer Science Group Department of Mathematics, University of Parma, Italy http://www.cs.unipr.it/~bagnara/ mailto:bagnara@cs.unipr.it