Prolog-匹配列表的一部分

时间:2012-11-06 23:30:26

标签: list prolog dcg unification

  

可能重复:
  Prolog- translating English to 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

因此会有一个用于加法的情况,一个用于减法,一个用于乘法等。基本上我想在列表中搜索短语“add I to J”并将该短语与(I + J)统一。或者在列表中搜索“在除以J之后取出剩余的I”并将其统一(I'%'J)。但是所有的短语都有不同的长度,即使我知道我想做什么以及如何做,我似乎也无法在prolog中得到它。

有点更新,但我忘了提及我现在所拥有的文件中所有基本规则的列表,如此

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 + J-H。单个基本规则(I + J和X-H)已定义,但我必须能够匹配较长列表中的每个部分。

0 个答案:

没有答案