Search code examples
reboloperator-precedencedialect

Preserving PAREN! when a reduce operation is run on a block


When you use REDUCE you basically operate in the DO dialect, where PAREN! groups can be used for precedence on items:

>> reduce ["Hello" (3 + 4) * 5]
== ["Hello" 35]

While in the COMPOSE dialect, PAREN! is used to call out which parts of the block you want to evaluate with the DO dialect, leaving the rest alone:

>> compose ["Hello" (3 + 4) * 5]
== ["Hello" 7 * 5]

But if you want to run reduce or compose and have a few things you want to leave in as literal parentheses, is there another idiom for it besides to-paren and a block?

>> reduce ["Hello" (3 + 4) * 5 to-paren ["inside!"]]
== ["Hello" 35 ("inside")]

Sidenote: I wonder what sort of craziness would result from LIT-PAREN?

>> reduce ["Hello" (3 + 4) * 5 '("inside!")]
== ["Hello" 35 ("inside")]

...then again, I don't know that I want to think about it. :-)


Solution

  • The more general way to achieve what you want is to rely on quote:

    >> reduce ["Hello " (3 + 4) * 5 quote ("inside!")]
    == ["Hello " 35 ("inside!")]
    

    QUOTE is available in R3 and in R2 since 2.7.7.