Hi Janeks,

why don't you simply use just the depth parameter to the function and if  
you recurse down the directory tree add always one to the depth value.  
Then you can do in the function whatever you like with the depth parameter  
and you don't need a local parameter.
It's anyway not clear to me how your output is supposed to look exactly.

What about this version, which works but still gives some kind of  
senseless output ?

readChaptDir2: func [ thisDir depth
        /local rez bl
] [
        rez: copy thisDir
        bl: sort read thisDir  ;separate to be able to see what happends
        probe bl   ;just for debugging
        repeat aFile bl copy/deep [
                print aFile  ;just for debugging
                either #"/" = last aFile [
                        repend rez [ "<br>dir:" join thisDir aFile depth + 1 ]
                        repend rez readChaptDir2 join thisDir aFile (depth + 1
                ][
                        repend rez [ <br> aFile ]
                ]
                
        ]
        return rez
]

readChaptDir2 %somedir/ 0



Michael

On Mon, 11 Apr 2005 23:55:54 +0300, <[EMAIL PROTECTED]> wrote:
>
> Thanks, Michael!
>
> Those bindings is unlear for me yet.
> But at least those variable scopes stays more clearer.
>
> Now the function is working with "repeat" and sorting list in a
> proper way.
> Now the problem is how to add depth counter:
>
> readChaptDir2: func [ thisDir depth
>       /local rez curDepth
>       ] [
>       curDepth: depth - 1
>       rez: copy thisDir
>       repeat aFile sort read thisDir copy/deep [
>               either #"/" = last aFile [
>                       repend rez [ "<br>dir:" join thisDir aFile
> curDepth ]
>                       repend rez readChaptDir2 join thisDir aFile
> curDepth
>               ][
>                       repend rez [ <br> aFile ]
>               ]
>               
>       ]
>       return rez
> ]
>
> brgds
>
> Janeks
>
> On 11 Apr 2005 at 1:03, Michael Berg wrote:
>
>>
>> Ok, last time - I hope. :-)
>>
>> If I'm right the reason why the error came up at the first empty
>> directory  and if there has been none, then only the first subtree is
>> traversed,  because of the recursive rebinding of the word 'aFile to
>> the repeat block.  While recursing down the first branch of the
>> directory tree the block gets  all the time bound to a new version of
>> 'aFile. Upon returning back from  the recursion the function one level
>> up doesn't find any more the 'aFile
>>  from before the recursive call and thus the test doesn't work or even
>>
>> fails. Fails when 'aFile has been bound to no value in the recursion
>> when  the directory was empty or to the last value of the file in the
>> deepest  directory, which just gets added as often as during the walk
>> up in the  tree some files (no directories) are encountered, because
>> always the  second block of 'either gets executed.
>>
>> :-)
>>
>> Just a question to somebody who might know: One of the reasons why the
>>  binding mechanisms of Rebol are necessary is to make the
>> keywordlessness  possible, else something like 'repeat wouldn't be
>> possible, right ??? But nevertheless I think these binding issues
>> should be one of the first  things to be explained to a newcomer. It
>> is an important property of Rebol  and should be treated like this. If
>> there are chances to encounter these  things in normal life they have
>> to be explained appropriately already on  the beginning and not on
>> some articles (Ladislavs Bindology) or some  sidenote in the
>> documentation that a function changes it's body argument.  Without
>> deeper glue of Rebol it's hardly to get the reason and just simply
>> using hints like using copy/deep on a block in some circumstances is
>> hard  to remember and hard to explain. Thus if Rebol is like this it
>> should be  put on the frontplate. ????!!!!
>>
>> Michael
>>
>> On Sun, 10 Apr 2005 23:43:04 +0300, Michael Berg <[EMAIL PROTECTED]>
>> wrote:
>>
>> >
>> > :-) Sorry, I maybe posted it too fast. I'm still searching for the
>> > the  why.
>> >
>> > I think that's one of the bad parts of Rebol. This dynamic binding
>> > might be powerful, but it causes a lot of trouble as well. For
>> > instance besides your note, I don't get right now why it for
>> > instance without copy/deep brings up an error when it encounters an
>> > empty directory, und with copy/deep it runs. (at least without the
>> > error message)
>> >
>> > Nevertheless it works with copy deep if you add in the argument
>> > section a "/local rez". I think you forgot to make rez local to the
>> > function as it is by standard global and gets everytime deleted. :-)
>> >
>> > Michael
>> >
>> > On Sun, 10 Apr 2005 23:13:14 +0300, <[EMAIL PROTECTED]> wrote:
>> >
>> >>
>> >> Thanks!
>> >> I noted this (copy/deep), but now it is working without errors, but
>> >> not corectly: First line is wrong - first directory of base dir is
>> >> added, and then just files of base dir.
>> >>
>> >> brgds
>> >> Janeks
>> >>
>> >> On 10 Apr 2005 at 22:44, Michael Berg wrote:
>> >>
>> >>>
>> >>> Hi,
>> >>>
>> >>> if you change the repeat line to
>> >>>
>> >>> repeat aFile read thisDir copy/deep [
>> >>>
>> >>> it will work, as repeat modifies the block to be repeated. See
>> >>> also at http://www.rebol.com/docs/words/wrepeat.html the user
>> >>> comment from Ladislav.
>> >>>
>> >>> Didn't know this myself - until now. :-)
>> >>>
>> >>> Michael
>> >>>
>> >>>
>> >>>
>> >>> On Sun, 10 Apr 2005 21:36:25 +0300, <[EMAIL PROTECTED]> wrote:
>> >>>
>> >>> >
>> >>> > Hi, Rebolers!
>> >>> >
>> >>> > I am new in rebol scopes. So it seems, that it cause problems in
>> >>> > my recursive directory reading function. Could somebody  give me
>> >>> > a bit more description about variable scopes in following case:
>> >>> >
>> >>> > readChaptDir2: func [ thisDir ] [
>> >>> >        rez: copy thisDir
>> >>> >        repeat aFile read thisDir [
>> >>> >                either #"/" = last aFile [
>> >>> >                        repend rez [ "<br>dir:" join thisDir aFile ]
>> >>> >                        repend rez readChaptDir2 join thisDir aFile
>> >>> >                ][
>> >>> >                        repend rez [ <br> aFile ]
>> >>> >                ]
>> >>> >                
>> >>> >        ]
>> >>> >        return rez
>> >>> > ]
>> >>> >
>> >>> > Looking forward,
>> >>> >
>> >>> > Janeks
>> >>> >
>> >>>
>> >>>
>> >>> --
>> >>> To unsubscribe from the list, just send an email to
>> >>> lists at rebol.com with unsubscribe as the subject.
>> >>>
>> >>>
>> >>
>> >>
>> >>
>> >
>> >
>>
>>
>> --
>> To unsubscribe from the list, just send an email to
>> lists at rebol.com with unsubscribe as the subject.
>>
>>
>
>
>


-- 
To unsubscribe from the list, just send an email to 
lists at rebol.com with unsubscribe as the subject.

Reply via email to