首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calc/2谓词

Calc/2谓词
EN

Stack Overflow用户
提问于 2014-02-21 10:14:21
回答 1查看 162关注 0票数 0

我需要定义一个谓词calculator/2,它接受一组英语算术表达式并产生一个数值结果。系统应该能够处理数字1-20。

示例执行:

代码语言:javascript
复制
?- calculator([three,times,two],Total).
Total=6
yes

?- calculator([twenty,times,three,plus,five,divided_by,two], Total).
Total = 32.5
EN

回答 1

Stack Overflow用户

发布于 2014-02-21 11:54:56

对于那些说“这是我第一次体验prolog,我甚至不知道从哪里开始”的人来说,这是一项极其艰巨的任务。

我会给你一些开始的东西,但你真的需要通过一些Prolog教程(我发现‘立即学习Prolog’,@mbratch在评论中提到的,非常好)来完成这项任务。

首先,您可以定义一些关于数字名称的Prolog事实(因为您只需要处理数字1-20,所以您可以简单地枚举所有可能的数字):

代码语言:javascript
复制
number(one, 1).
number(two, 2).

..。

代码语言:javascript
复制
number(twenty, 20).

然后,您可以定义一些仅适用于两个数字的谓词:

代码语言:javascript
复制
calculator([A, plus, B], Result) :-
    number(A, ValA), number(B, ValB), Result is ValA + ValB.

calculator([A, times, B], Result) :-
    number(A, ValA), number(B, ValB), Result is ValA * ValB.

从您的示例判断,没有使用运算符的优先规则。然后,如果列表包含2个以上的数字(超过3个条目),则可以将上述谓词应用于前三个列表条目,并递归处理。

希望您在学习完一些Prolog教程后,可以继续学习。

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

https://stackoverflow.com/questions/21923917

复制
相关文章

相似问题

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