Hi everyone, thank you for your replies. I came up with a solution to avoid the circular reference by initializing the final thing I want to calculate, P(H|E), with a placeholder value of -1.0, and then running a bot that does the final calculation after the record has been created.
You all had good advice on how to create the ordering necessary to get the value from the previous record in the inline view, and I wanted to share how I did that here.
The ordering is done with a virtual column, NVC_ENumber
count(
split(
left(
concatenate(Select(evidence_for_hypotheses[evid_id], ([hyp_id]=[_THISROW].[hyp_id]))),
find(
[_THISROW].[evid_id],
concatenate(Select(evidence_for_hypotheses[evid_id], ([hyp_id]=[_THISROW].[hyp_id])))
) + (LEN([_THISROW].[evid_id]) - 1)
),
" , ")
)
The previous value of P(H|E) is put in a virtual column NVC_Prev_P(H|E)
DECIMAL(
INDEX(
SELECT(evidence_for_hypotheses[NVC_P(H|E)],
AND(
[NVC_ENumber]=[_THISROW].[NVC_ENumber]-1,
[hyp_id]=[_THISROW].[hyp_id]
)
), 1)
)
This is used conditionally in the virtual column NVC_P(H)
IF([NVC_ENumber]=1, 0.5, [NVC_Prev_P(H|E)])
And finally the bot updates a column in the evidence_for_hypotheses table called P(H|E), which is the final thing I wanted at the end
[NVC_P(E|H)][NVC_P(H)]/([NVC_P(E|H)][NVC_P(H)]+[NVC_P(E|~H)]*(1-[NVC_P(H)]))
Again, thank you all for looking at this problem with me!