Did you know ... Search Documentation:
Predicate signal/2
 signal(+Condition, -Restart) is multi
Signal a Condition and allow handlers to bind Restart. This predicate is the mechanism by which code indicates that it doesn't know how to proceed and is requesting assistance in choosing a path forward.

It's possible for ancestors to disagree about Restart (aka, different values on backtracking). In this scenario, it's acceptable to choose the first (innermost) Restart, iterate each Restart in turn or consider all Restart values together (quorum?).

If no ancestor has an opinion, signal/2 calls throw(Condition). If you'd rather use a default value for Restart in this case, use signal/3 instead.

It's quite common for signal/2 to leave dangling, false choicepoints. If you're only interested in the first Restart value, use once/1 or a similar construct to explicitly state that intent.