首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog-将英语翻译成C

Prolog-将英语翻译成C
EN

Stack Overflow用户
提问于 2012-11-07 02:27:16
回答 1查看 549关注 0票数 1

我们有一个相对简单的任务,理论上我可以理解,但我想我只是不太理解Prolog的语法,不足以将其放入代码中。基本上,我们有一个用C表示操作的英文符号列表,当它们被传递到我们的Prolog程序时,它们被存储为一个列表。例如:

代码语言:javascript
复制
add 4 to 3

代码语言:javascript
复制
[add, 4, to, 3]

我们需要编写一个函数,该函数接受列表并返回等价的列表。所以如果我打电话给

代码语言:javascript
复制
english2C([add,4,to,3], C).
C = 4+3

它会将C绑定到结果。因此,数据结构本身将类似于+(4(3))。我们有一个这样的英文符号列表,我们必须翻译,所以它是一个有限的数字。这不是说我们必须考虑所有的可能性。还有一些组合,它们接受两个操作并将它们组合在一起(中间用逗号)

代码语言:javascript
复制
english2C([add,3,to,5,',',then,subtract,7], C).
C = 3+5-7

我只是有点困惑于如何开始。我知道我可以获取列表的第一个元素,它总是一个运算符(+,-,*,等等),然后我可以递归地遍历列表,查找操作数。这里的问题是需要操作顺序的东西,比如“将3加到5,然后乘以4",它应该表示为(3+5)*4,但是如果你直接翻译它,你就会得到3+5*4。

哦,我们必须看看我们是否可以让它向后运行(给它一个C语句(3+5)并翻译回英语(加3到5))。这部分我真的一点也不知道。

编辑:有一个足够大的可能的英语符号排列,我不能只是模式匹配所有东西。我得到的想法是,我需要做的是匹配第一个运算符和它对应的算术符号,然后找到操作数。对于组合语句,这将是第一部分(因此我将使用3+5),然后是一个逗号,后面是下一个语句。顺便说一句,组合语句可以想要多长就多长,所以不只是两个语句,我说完了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-07 02:55:24

如果有合理的少量模式,您可以这样做:

代码语言:javascript
复制
english2C([add,X,to,Y], R) :- R is X+Y.
english2C([add,A,to,B,',',then,subtract,C], R) :- R is A+B-C.

编辑

上面的那些规则计算该值。为了进行翻译,我们可以使用DCG进行匹配,它也可以“向后”工作。

代码语言:javascript
复制
english2C(In, R) :- phrase(toe(R), In, []).

toe(X+Y) --> [add,X,to,Y].
toe(X*Y) --> [multiply,X,by,Y].
toe(L-R) --> toe(L), [',',then,subtract,R].

测试:

代码语言:javascript
复制
?- english2C(X,3+6).
X = [add, 3, to, 6].

编辑对不起,我忘了切了。加上这一点,我得到

代码语言:javascript
复制
?- english2C([add,3,to,5,',',then,subtract,4],X).
X = 3+5-4.

?- english2C(L,3+5-4).
L = [add, 3, to, 5, ',', then, subtract, 4].

如果没有,后面就会有循环;

代码语言:javascript
复制
?- english2C([add,3,to,5,',',then,subtract,4],X).
X = 3+5-4 ;
^CAction (h for help) ? goals
[698,875] toe(_G2096630, [add, 3, to, 5, ',', then, subtract, 4], _G2096652)
[698,874] toe('<garbage_collected>', '<garbage_collected>', _G2096652)
...

这是一个单一的变化:你更喜欢自己找到它吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13257058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档