我需要定义一个谓词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发布于 2014-02-21 11:54:56
对于那些说“这是我第一次体验prolog,我甚至不知道从哪里开始”的人来说,这是一项极其艰巨的任务。
我会给你一些开始的东西,但你真的需要通过一些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.从您的示例判断,没有使用运算符的优先规则。然后,如果列表包含2个以上的数字(超过3个条目),则可以将上述谓词应用于前三个列表条目,并递归处理。
希望您在学习完一些Prolog教程后,可以继续学习。
https://stackoverflow.com/questions/21923917
复制相似问题