Prologificando o Inglês para C

Nós temos uma tarefa relativamente simples que eu entendo em teoria, mas eu acho que não consigo entender a sintaxe do Prolog o suficiente para colocar isso no código. Basicamente, temos uma lista de notações em inglês que representam operações em C. Elas são armazenadas como uma lista quando são passadas para nosso programa Prolog. Por exemplo:

add 4 to 3

é

[add, 4, to, 3]

Precisamos escrever uma função que pegue essa lista e retorne o equivalente. Então, se eu liguei

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

Isso ligaria C ao resultado. Assim, a estrutura de dados em si seria algo como + (4 (3)). Temos uma lista de tal notação em inglês que temos que traduzir, então é um número finito. Não é como se tivéssemos que considerar todas as possibilidades. Há também combinações, onde eles tomam duas operações e as combinam (com uma vírgula entre elas)

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

Estou um pouco confuso sobre como começar. Eu sei que posso pegar o primeiro elemento da lista e que sempre será um operador (+, -, *, etc etc) e então eu posso recursivamente percorrer a lista procurando os operandos. O problema existe para coisas que requerem ordem de operações, como "adicione 3 a 5 e depois multiplique por 4", que deve ser representado como (3 + 5) * 4 mas se você apenas traduzi-lo diretamente, obtém 3 + 5 * 4 .

Ah, e nós temos que ver se podemos fazer isso rodar para trás (dar uma declaração C (3 + 5) e traduzir de volta para o inglês (adicionar 3 a 5)). Essa parte eu realmente não tenho uma ideia.

EDIT: Há um grande o suficiente permutações de possíveis anotações em inglês que eu não posso apenas padrão corresponder a tudo. Eu tenho a idéia de que o que eu preciso fazer é combinar o primeiro operador com seu símbolo aritmético correspondente e então encontrar os operandos. Para uma declaração combinacional, essa seria a primeira parte (então eu teria 3 + 5) e então haveria uma vírgula seguida da próxima instrução. By the way, as declarações combinacionais podem ser o tempo que eles querem, por isso não é apenas duas declarações e eu estou feito.

questionAnswers(1)

yourAnswerToTheQuestion