On 03/01/2015 06:01 AM, Vladimir V. Kisil wrote:
On Sun, 01 Mar 2015 05:38:41 -0500, soppon <gvitbsord@aol.com> said: soppon> Hi. I'm trying to use list as input. List as output prints soppon> {expr1,expr2,..}, list.nops() is varying. When I write list soppon> as: parser reader; somelist=reader(cin); where input to cin: soppon> {expr1,expr2,..} at the end shift-D It returns soppon> somelist={expr1,expr2,..}, somelist.nops()=1. When soppon> accessing the 2nd and higher element of list, program gets soppon> segmentation fault.
I am not completely sure, but the following example may give you a hint:
ex l1=lst(a,b,c); lst l2=l1;
In this case l1.nops()=3, but l2.nops()=1, because l2 has the only element equal to l1 as a whole. To get thing right you may use:
ex l1=lst(a,b,c); lst l2=ex_to<lst>(l1);
To analyse situation use somelist.dbgprint() or even somelist.dbgprinttree(). I didn't see dbgprint() in tutorial, so i use tree for debug. #include <iostream> #include <ginac/ginac.h> using namespace std; using namespace GiNaC;
int main() { symbol xs("x"); lst expr,ep; parser reader; expr=reader("{x,x}"); ep=xs,xs; cout<<expr<<tree << endl; //get {{x,x}} cout<<ep<<tree << endl; //some hash table return 0; }