  | 
  | 
 
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
As we can't use arrays inside functions I tried something else. A spline 
is an array, kind of and works in functions. So some test code, that 
works. There's one little thing I don't realy understand. I have to undef 
the 'i' used in SPL or rename it or the one in N. Otherwise I get: 
line xxx: Parse Error: Local variable name expected!
---%<------%<------%<---
#declare arrSPL = array[5]{
  <0,0>,
  <1,0>,
  <2,0>,
  <3,0>,
  <4,0>
}  
  
#declare SPL = spline{
  #for(i,0,dimension_size(arrSPL,1)-1)
    i, arrSPL[i],
  #end
}
#debug concat(str(SPL(4).x,5,5),"\n")
#undef arrSPL
#undef i      // <--------- !!
#declare Ar = function{
  spline{SPL}
}
#debug concat(str(Ar(4).x,5,5),"\n")
#undef SPL
#declare N = function(D){sum(i, 0, D, Ar(i).x)};
#declare NAR = N(4);
#debug concat(str(NAR,5,5),"\n")
---%<------%<------%<---
Ingo
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
ingo <ing### [at] tag povray org> wrote:
There's one little thing I don't realy understand. I have to undef
> the 'i' used in SPL or rename it or the one in N. Otherwise I get:
>
> line xxx: Parse Error: Local variable name expected!
Is it because you are essentially declaring an identifier for a scalar, and the
sum function wants to use a "function variable identifier", but there is a name
clash?
> ---%<------%<------%<---
These are very cool ASCII scissors   :D
I did a fair amount of work using a spline and another similar method to
implement Jerome's Pythagorean tiling in the source code as a function in SDL.
It was challenging, but I learned a lot and came up with something "new"  :)
 
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
On 2021-04-14 1:50 PM (-4), ingo wrote:
> As we can't use arrays inside functions I tried something else. A spline 
> is an array, kind of and works in functions. So some test code, that 
> works. There's one little thing I don't realy understand. I have to undef 
> the 'i' used in SPL or rename it or the one in N. Otherwise I get: 
> 
> line xxx: Parse Error: Local variable name expected!
> 
> ---%<------%<------%<---
> #declare arrSPL = array[5]{
>   <0,0>,
>   <1,0>,
>   <2,0>,
>   <3,0>,
>   <4,0>
> }  
>   
> #declare SPL = spline{
>   #for(i,0,dimension_size(arrSPL,1)-1)
>     i, arrSPL[i],
>   #end
> }
> #debug concat(str(SPL(4).x,5,5),"\n")
> #undef arrSPL
> #undef i      // <--------- !!
> 
> #declare Ar = function{
>   spline{SPL}
> }
> #debug concat(str(Ar(4).x,5,5),"\n")
> #undef SPL
> 
> #declare N = function(D){sum(i, 0, D, Ar(i).x)};
> #declare NAR = N(4);
> #debug concat(str(NAR,5,5),"\n")
> ---%<------%<------%<---
You've just been burned by POV-Ray's scope leakage, a design flaw IMO.
It has nothing to do with you having used i to define the spline.  *Any*
identifier name local to a function definition will fail if the name had
been previously used--even if it was declared in an include file that
you did not write.  You will also get a parse error if you #declare D at
the top of your scene file.
I make it a practice never to use a name in a function that is used
elsewhere in the scene.  Since this means avoiding names declared in
include files written by other people, I have to get creative with
identifier names.
Note that you did not need to #undef arrSPL or SPL.  The scene runs fine
without those 2 #undefs.
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
in news:607769cc@news.povray.org Cousin Ricky wrote:
> 
> You've just been burned by POV-Ray's scope leakage, [...]  You will also 
get a parse
> error if you #declare D at the top of your scene file.
Ah. The #declare D is one I've encoutered often and a reason for me to put 
functions in include files as much as possible.
I am aware that the first i lives on after the end of the for loop. It can 
be usefull to do some trickery with.
> I make it a practice never to use a name in a function that is used
> elsewhere in the scene.  [...]
Pseudo namespace are usefull. For many include files I prepend everything 
with the same few letters once they turn into something final. Like arrSPL 
lives in my personal "arr.inc". I saw jr. does the same with fore_ and qq
> Note that you did not need to #undef arrSPL or SPL.  The scene runs
> fine without those 2 #undefs.
> 
I know. In test scenes I keep "stuff" around so I don't forget what I did.
Thanks,
Ingo
 
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
in news:web.6077665a848889811f9dae3025979125@news.povray.org Bald Eagle 
wrote:
>> ---%<------%<------%<---
> 
> These are very cool ASCII scissors   :D
> 
usenet habits from the days of old :)
Ingo
 
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
Op 15/04/2021 om 00:02 schreef Bald Eagle:
> ingo <ing### [at] tag povray org> wrote:
>> ---%<------%<------%<---
> 
> These are very cool ASCII scissors   :D
> 
or an angry emoticon:  %<   %-<   /%-<   >%-<
-- 
Thomas
 
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
On 15.04.2021 00:16, Cousin Ricky wrote:
 > You've just been burned by POV-Ray's scope leakage, a design flaw IMO.
It isn't a design flaw as the declare is a preprocessor directive, so it 
all happens at well defined times during parsing and there are no leaks 
of variables. It is common to languages with preprocessors, in 
particular C/C++. I agree that it is annoying though.
Thorsten
 
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
On 2021-04-15 1:59 AM (-4), ingo wrote:
> 
> Pseudo namespace are usefull. For many include files I prepend everything 
> with the same few letters once they turn into something final. Like arrSPL 
> lives in my personal "arr.inc". I saw jr. does the same with fore_ and qq
This is a good idea with languages that have no namespace operator, such
as POV-Ray SDL.  It is a requirement for compliance level 3 for include
files in the Object Collection, and I've made that a practice in all of
my include files.
 
 Post a reply to this message 
 | 
  | 
 
 |   |  
 |   |  
 | 
  | 
 | 
  | 
 
 |   |  
 
 | 
  |