As written, the simple answer to your question is to use begin0 or
begin, depending on if you are using ~> or ~>>.

    > (~> 3 (begin0 (displayln "hi!")) (* 2))
    hi!
    6

But as Greg mentions, this is not very useful, and it probably isn’t
what you want, since the evaluated expression can only be evaluated for
side-effects, which is rather against the spirit of threading macros
altogether.

It is a little difficult for me to imagine what a hypothetical syntax
for your use-case would look like without turning ~> into a much more
complicated binding form. As it is, the threading macros are all quite
simple, and they are simple shorthands for syntactic nesting. It would
be possible to generalize them quite a bit, but I am fond of their
simplicity, and I think Greg’s suggestion to just use let* is a good
one. I’m not sure there is a good way to synthesize the brevity and
simplicity of threading with a more powerful binding form, though if you
can come up with a syntax that accomplishes what you’re getting at, I’d
certainly at least be interested by it.

> On Jun 25, 2017, at 09:44, Sanjeev Sharma <throw...@gmail.com> wrote:
> 
> is there a way to do a calculation in the middle of the chain that
> takes no arguments?  In other words, exempt some operations in the
> chain from taking any arguments.
> 
> Suppose one's doing a calculation of interest earned on an investment
> and one is threading a running balance through the chain, but at
> places one needs a calculation for purchases and/or dispositions to
> the investment.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to