You can set a local variable to the value of the computation beforehand, or use the "contains" predicate, but I agree that neither of these options are concise.
What I would do in this case is create a "let ... in ..." reporter that sets an upvar and then returns the result of the given expression, which would let you do this:
The let variable be value in body reporter works well in my project. Though I avoided the equal sign since it is used only for testing equality in Snap!. But I needed to make body a reporter: E.g.
You can set body to be an unevaluated input (look for the input shape called "Any (unevaluated)"). It will look like a normal input from the outside, but the procedure receives an anonymous function that it can call to evaluate the input expression when it's needed.