Calc / 2谓词

时间:2014-02-21 02:14:21

标签: prolog

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

示例执行:

?- calculator([three,times,two],Total).
Total=6
yes

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

1 个答案:

答案 0 :(得分:3)

对于那些说“这是我第一次体验序言而且我甚至不知道从哪里开始的人来说,这是一项非常艰巨的任务。”

我会给你一些启动的东西,但你真的需要通过一些Prolog教程(我发现'现在学习Prolog',@mbratch在评论中提到,非常好)才能做到任务。

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

number(one, 1).
number(two, 2).

...

number(twenty, 20).

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

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.

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

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