如果我在Prolog中有一个由运算符和操作数组成的列表,那么如何解释列表以在适当的操作数上获得适当的运算符?
所以我们假设我们有一个
列表[100,25,sum,2,multiply,800,50,subtract,sum]
应通过以下步骤生成[1000]
// 100 and 25 are summed together, making it
[125, 2, multiply, 800, 50, subtract, sum]
// 125 and 2 are multiplied, making it 250
[250, 800, 50, subtract, sum]
// 50 is subtracted from 800, making it 750
[250, 750, sum]
// 250 is added to 750, making it 1000
[1000]
我试图理解如何使这种情况发生的结构(特别是如何遍历列表并进行适当的操作,而不是那些关于执行实际工作的辅助谓词[sum,multiple等] )。哪种情况最好,我应该考虑哪些其他因素?
情景1'一路走来' (主谓词,其中包含list1(评估前)和list2(最终列表)):
member
),如果是,请查看列表中是否有足够的先前值来完成它,如果是,则返回带尾部的已完成操作,如果没有,则返回假的。情景2'展望未来' (主谓词,其中包含list1(评估前)和list2(最终列表)):
duplicatePairs
所需的操作需要两组对,因此需要4个数字)场景3'向左折叠' (主谓词,其中包含list1(评估前)和list2(最终列表)):
答案 0 :(得分:2)
我能想到的更简单的代码:
eval([A1,A2,sum|Rest], Result) :- Sum is A1+A2, !, eval([Sum|Rest], Result).
eval(Result, Result).
依旧......测试:
?- eval([1,2,sum,4,sum],R).
R = [7].
当然,'catchall'eval(Result, Result).
必须是最后一条规则......