It also strikes me that rewriting

    A AND (B OR C) 

as

   B C +A

is pretty neat - it eliminates the parentheses OR becomes whitespace and 
AND becomes +

It's a Reverse Polish Monad Filter (RPMF)

/Joe



  



On Thursday, 20 December 2018 10:38:37 UTC+1, joearms wrote:
>
>
>
> On Wednesday, 19 December 2018 23:21:15 UTC+1, Jeremy Ruston wrote:
>>
>> Hi Joe
>>
>> Then a filter that finds A is "[tag[A]]"
>>
>> B OR C is "[tag[B]] [tag[C]]"
>>
>> A AND B is "[tag[A]tag[B]]"
>>
>> A and (B or C) has to be rewritten as
>> (A and B) or (A and C) and is 
>>
>> "[tag[A]tag[B]] [tag[A]tag[C]]”
>>
>>
>> You can directly do A and (B or C) as:
>>
>> [tag[B]] [tab[C]] +[tag[A]]
>>
>> There are three runs here:
>>
>> * The first two are processed in the same way: they start with an 
>> implicit [all[tiddlers]] to select all “real” tiddlers (ie, non-shadow 
>> tiddlers), whether or not they are system tiddelrs. The [tag[x]] filter 
>> operator selects those tiddlers that carry the indicated tag. At the end of 
>> processing each run, the results of the run are merged into the 
>> accumulator, the temporary holding storage for intermediate results.
>>
>> * The third run starts with a “+” which means that instead of kicking off 
>> with all the real tiddlers, it instead uses the accumulator as the input to 
>> the run. The [tag[A]] then selects those tiddlers from the accumulator that 
>> carry the tag “A”.
>>
>> The results of the third run replace the accumulator, and become the 
>> results of the entire filter.
>>
>
>    Great - IMHO the above explanation is far better than the definitive 
> explanation 
>    https://tiddlywiki.com/#Filter%20Expression
>
>  So the algorithm is
>
>     1) create an empty output set (call this accumulator)
>     2) A <whitespace> B means
>         starting from the set of all tiddlers add those that match A to 
> accumulator
>         starting from the set of all tiddlers add those that match B to 
> accumulator
>     3) +X means starting from the accumulator
>         match all X's and create a NEW accumulator which is passed onto 
> the next step
>
>      So A B +C where A B and C are "runs" means (in pseudo code)
>
>      accumulator = {}    // empty set
>      accumulator += matchalltags oftype A from all tiddlers
>      accumulator += matchalltags oftype B from all tiddlers
>      accumulator1 = matchalltags oftype C from accumulator
>      return accumulator1       
>
>
>> The other filter prefixes that are available are “-“ and “~”. The action 
>> of minus is that the results of the run are removed from the accumulator 
>> (the input to the run is still the list of all “real” tiddlers). The action 
>> of tilde is to only evaluate the run if the accumulator is empty; the 
>> results of the run then become the accumulator.
>>
>> Which in a strange way reminds me of horn clauses in Prolog where I'd 
>> write:
>>
>> ```
>> filter(a, b) :- ...
>> filter(a, c) :- ..
>> ```
>>
>> So really these filter expressions are equivalent to queries in predicate 
>> logic.
>>
>> (which is why they are so powerful :-)
>>
>>
>> Thank you! It’s slightly embarrassing to have to invent something rather 
>> than being able to adopt something tried and trusted, so it’s good to hear 
>> that it’s not too terrible.
>>
>>
> You've invented the monad :-) - monads just pass an invisible state 
> through a pipeline of operations
> that manipulate the state (you call it an accumulator)
>
> Cheers
>
> /Joe
>
>  
>
>> Best wishes
>>
>> Jeremy
>>
>>
>> Cheers
>>
>> /Joe
>>
>>
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "TiddlyWikiDev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/tiddlywikidev.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/tiddlywikidev/9b8edbb1-8657-4502-ba5e-c867651203a4%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/tiddlywikidev/9b8edbb1-8657-4502-ba5e-c867651203a4%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWikiDev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/tiddlywikidev.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywikidev/c99a4b1d-c684-40fa-b527-28d34fa921ea%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to