Encuentra todas las expresiones de cuatro 10

Fui desafiado con un problema de CS.

El problema consiste en encontrar recursivamente qué expresiones de la forma ((10 + 10) / (10 + 10)) producen un número. Por ejemplo, ((10 + 10) / (10 + 10)) produce 1. Encuentre todas las otras expresiones usando los operadores +, -, *, /, con 4 números de 10, y todas las combinaciones de paréntesis para imponer órdenes de operaciones.

e remitieron a la notación polaca inversa, pero eso se basa en la notación postfix, que no es necesaria para resolver este problema.

Algunos pseudocódigo que tengo es esto. Sé que usar la recursión es la forma más fácil de resolver este problema. Pero no sé cómo asegurarme de obtener todas las combinaciones.

build([10,10,10,10], Expression) :-
      Operator
     /       \
   [10]     [10,10,10]
             Operator
              /     \
           [10]     [10,10]
                    Operator
                     /    \
                   [10]   [10]

Esto es un problema que estoy tratando de resolver en Prolog pero C ++ también es bueno.