我需要定义一个谓词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
答案 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教程后可以继续学习。