Prolog- tłumaczenie angielskiego na C

Mamy stosunkowo proste zadanie, które rozumiem w teorii, ale myślę, że po prostu nie rozumiem wystarczająco składni Prologu, aby dostać to do kodu. Zasadniczo mamy listę angielskich notacji reprezentujących operacje w C. Są one przechowywane jako lista, gdy są przekazywane do naszego programu Prolog. Na przykład:

add 4 to 3

jest

[add, 4, to, 3]

Musimy napisać funkcję, która pobiera tę listę i zwraca jej odpowiednik. Więc jeśli zadzwonię

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

Wiązałoby to C z wynikiem. Sama struktura danych byłaby podobna do + (4 (3)). Mamy listę takich notacji angielskich, które musimy przetłumaczyć, więc jest to liczba skończona. Nie musimy odpowiadać za wszystkie możliwości. Istnieją również kombinacje, w których wykonują dwie operacje i łączą je (z przecinkiem pomiędzy)

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

Jestem trochę zdezorientowany, jak zacząć. Wiem, że mogę wziąć pierwszy element listy, który zawsze będzie operatorem (+, -, *, etc etc), a następnie mogę po prostu rekurencyjnie przejść przez listę w poszukiwaniu argumentów. Problem dotyczy rzeczy wymagających kolejności operacji, takich jak „dodaj 3 do 5, a następnie pomnóż przez 4”, co powinno być reprezentowane jako (3 + 5) * 4, ale jeśli po prostu przetłumaczysz bezpośrednio, otrzymasz 3 + 5 * 4 .

Aha i musimy sprawdzić, czy uda nam się uruchomić go wstecz (daj mu oświadczenie C (3 + 5) i przetłumacz ponownie na angielski (dodaj 3 do 5)). W tej części naprawdę nie mam pomysłu.

EDYCJA: Istnieje wystarczająco dużo permutacji możliwych notacji angielskich, że nie mogę tak po prostu dopasować wszystkiego. Rozumiem, że to, co muszę zrobić, to dopasować pierwszego operatora do odpowiadającego mu symbolu arytmetycznego, a następnie znaleźć operandy. W przypadku zestawienia kombinacyjnego byłaby to pierwsza część (więc miałbym 3 + 5), a następnie byłby przecinek, a po nim następna instrukcja. Nawiasem mówiąc, kombinacyjne stwierdzenia mogą być tak długie, jak chcą, więc nie są to tylko dwa stwierdzenia i już skończyłem.

questionAnswers(1)

yourAnswerToTheQuestion