Gottfried Helms on Sat, 05 Nov 2022 23:43:22 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Bug in evaluating "if(p==[],...)" |
This is a funny bug. I have a function with two arguments (p,q); - if in argument p is a scalar value, a vector in q is expected, - if in p is a vector, in q is a scalar expected. The vectors can be empty (p=[] or q=[]), their type being vector simply indicates, that some specific sequel has to be worked. Here is the maximally reduced function: {testfindroots_pq(p=[],q=[]) = my(); if(p==[] ,print("p=",p," q=",q," ---> heading in p==[] path "); ,print("p=",p," q=",q," ---> heading in p<>[] path "); ); } Here the result: testfindroots_pq([],1) \\ p=[] q=1 ---> heading in p==[] path +++ correct testfindroots_pq([],0) \\ p=[] q=0 ---> heading in p==[] path +++ correct testfindroots_pq(1,[]) \\ p=1 q=[] ---> heading in p<>[] path +++ correct testfindroots_pq(0,[]) \\ p=0 q=[] ---> heading in p==[] path ***** false ***** The problem is here, that supplying the scalar integer value "0" is taken as "==[]" (but not for instance the integer value "1") Just to note for this tiny bug. ----------------------------------------------------------------------------------- A correctly working version is of course the more explicite {testfindroots_pq(p=[],q=[]) = my(); if(type(p)=="t_VEC" \\ <-- this works correctly ,print("p=",p," q=",q," ---> heading in p==[] path "); ,print("p=",p," q=",q," ---> heading in p<>[] path "); ); } Gottfried Helms