Eric
The first quick tip about recursive processes in tiddlywiki is if a filter
is used to call a level it usually describes a list of titles or values
which are themselves limited in number, that is they are exhausted
eventually and the recursive process returns to the previous call.
here is an example I shared sometime ago, intentionally made into two
macros so the user can find where to insert modifications
\define each-other-level(filter)
<li><$link to=<<currentTiddler>> ><$text text=<<currentTiddler>>/></$link></li>
<ul>
<$list filter="$filter$">
<<each-other-level $filter$>>
</$list>
</ul>
\end
\define first-level(filter)
<ul>
<$list filter="$filter$">
<<each-other-level $filter$>>
</$list>
</ul>
\end
Start in TableOfContents<br>
<$tiddler tiddler="TableOfContents">
<<first-level "[is[current]tagging[]]">>
</$tiddler>
Although quite complex one insight for the adventerouse into recursive
processes in tiddlywiki is the TOC macros which obviously use recursion
see $:/core/macros/toc
Of course if you iterate a hierarchy you need to be careful of entering an
infinite loop if one item has a child that is above it in the hierarchy "it
may be its own grandfather".
Bimlases Kin filter is good at turning hierarchies into a flat list of
titles (among other things) so this can simplify code.
I think using filters can make recursion easy in TiddlyWiki because it
naturally limits the iterations, but if you look in my example above, in
each-other-level you could add logic to skip calling itself in particular
conditions.
Regards
Tony
On Wednesday, May 20, 2020 at 7:01:17 PM UTC+10, Eric N. wrote:
>
> Hi Tony,
> Sorry for the late answer...
>
> You are right, I am sometimes confusing this google group with a
> Tiddlywiki FAQ + code review + ideas box + many other things ;-)
>
> My main question was not really about how to solve my specific problem,
> but the generic problem of using recursive macros and if then else nested
> statements in the macros.
>
> I'm used to using functions, and in those a simple "return value" will
> skip the rest of the function code. Clear and short code.
>
> In macros, I'll display the output "value" but then I have to make sure
> that the rest of the code is not executed, i.e. that it doesn't display and
> execute other stuff. That is, I need to make sure that I'll reach the
> "\end" of the macro without executing anything - as if I did return a value
> in a function.
>
> Because of this "as if", i.e. because I have to make sure I'll reach the
> end of the macro code without executing anything once I've output what I
> wanted, I have to use a lot of if then else statements, nested, i.e. a lot
> of "<$list filter=...>" statements.
>
> And because of that, the code I write seems to me hard to read, hard to
> understand later on and hard to maintain. (cf nested lists in my original
> post)
>
> And so, this is so surprising to me that I end up with a code I am not
> comfortable with, not happy with, that I wondered if there was something I
> completely missed with macros and nested if-then-else statements.
>
>
> If that's just the way it works, then OK... Otherwise I'd be happy to
> learn how to produce a better code :)
>
> Best,
> And have a good day everyone !
>
>
> Eric
>
>
> On Thursday, May 14, 2020 at 3:38:20 PM UTC+4, TonyM wrote:
>>
>> Eric
>>
>> Love the way you are thinking some of us have done similar things. I
>> think it is as easy as anywhere to do this kind of thing. Of course it has
>> its own complexity. I would look at solving component issues then bring
>> them together in a solution.
>>
>> I can help more later but consider a custom new here button which passes
>> more to the child tiddler than a tag. Its easy to creat a tiddler with
>> additional fields. I have posted on setting context before but a simple
>> fieldname={{!!fieldname}} in the creat tiddler can do a lot.
>>
>> I will see what other tips I can share when next at my desktop.
>>
>> Regards
>> Tony
>>
>>
--
You received this message because you are subscribed to the Google Groups
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/tiddlywiki/f5872b02-af03-4729-a692-72dcfa1e7060%40googlegroups.com.