可能重复:
Prolog- 将英语翻译成 C
我们基本上有一个作业,我们得到一个表示英语符号的列表,例如 [add,3,to,5],我们需要接受它并让它在 C 中输出相应的符号。
english2C([add,3,to,5], C).
C = 3+5
我们的数量是有限的。我们也可以将两个这样的列表组合成一个更长的列表
english2C([add,3,to,5,',',then,subtract,7], C).
C = 3+5-7
但是这些较长的列表总是由较短的列表组成,其中有一定数量的。这就是我卡住的地方。我希望能够使用模式匹配,但我不完全确定 prolog 中的语法如何
english2C([first,second,third,fourth|rest], C)
*pseudo code*
match first with an operator
C = second (matched operator) third
所以会有一种情况用于加法,一种用于减法,一种用于乘法等。基本上我想在列表中搜索短语“将 I 加到 J”并将该短语与 (I + J) 统一。或者在列表中搜索“除以 J 后取 I 的余数”并将其与 (I '%' J) 统一。但是所有的短语都是不同的长度,即使我知道我想做什么以及如何去做,我似乎无法在序言中得到它。
有点更新,但我忘了提及我现在拥有的文件中所有基本规则的列表,就像这样
rule([add,I,to,J], X) :- X = I+J
rule([subtract,I,from,J], X) :- X = J-I
等等等等。问题是组合列表。例如,我们拥有的列表可能是 [add,I,to,J,',',then,subtract,H],它必须是 I+JH。定义了各个基本规则(I+J 和 XH),但我必须能够匹配更长列表中的每个部分。