Prólogo traduciendo inglés a C

Tenemos una tarea relativamente simple que entiendo en teoría, pero creo que simplemente no entiendo la sintaxis de Prolog lo suficiente como para incluir eso en el código. Básicamente, tenemos una lista de notaciones en inglés que representan operaciones en C. Se almacenan como una lista cuando se pasan a nuestro programa Prolog. Por ejemplo:

add 4 to 3

es

[add, 4, to, 3]

Necesitamos escribir una función que tome esa lista y devuelva el equivalente. Así que si llamo

english2C([add,4,to,3], C).
C = 4+3

Se uniría C al resultado. Así que la estructura de datos en sí sería algo así como + (4 (3)). Tenemos una lista de dicha notación en inglés que tenemos que traducir, por lo que es un número finito. No es que tengamos que tener en cuenta todas las posibilidades. También hay combinaciones, donde toman dos operaciones y las combinan (con una coma en el medio)

english2C([add,3,to,5,',',then,subtract,7], C).
C = 3+5-7

Estoy un poco confundido en cuanto a cómo empezar. Sé que puedo tomar el primer elemento de la lista y que siempre será un operador (+, -, *, etc.) y luego puedo ir recursivamente a través de la lista en busca de los operandos. El problema es que hay cosas que requieren un orden de operaciones, como "sumar 3 a 5 y luego multiplicar por 4", que debe representarse como (3 + 5) * 4, pero si lo traduces directamente, obtienes 3 + 5 * 4 .

Ah, y tenemos que ver si podemos hacerlo correr hacia atrás (déle una declaración en C (3 + 5) y traduzca de nuevo al inglés (agregue 3 a 5)). Esa parte realmente no tengo una idea para nada.

EDITAR: Hay una gran cantidad de permutaciones de posibles notaciones en inglés que no puedo hacer coincidir con todo. Tengo la idea de que lo que debo hacer es hacer coincidir el primer operador con su correspondiente símbolo aritmético y luego encontrar los operandos. Para una declaración combinatoria, esa sería la primera parte (por lo que tendría 3 + 5) y luego habría una coma seguida por la siguiente declaración. Por cierto, las declaraciones combinatorias pueden ser tan largas como quieran, por lo que no son solo dos declaraciones y ya he terminado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta