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.