这是我第一次使用序言,所以希望您能帮助我找出我在这里缺少的内容。
对于命令:
eq_multiply(equation([variable("a", 2), variable("b", 1)]), 3, MultipliedEquation).
我得到以下输出:
MultipliedEquation = equation(_2922).
相反,我需要获得以下输出:
MultipliedEquation = equation([variable(a, 6.0), variable(b, 3.0)]).
那是我的代码:
eq_multiply(equation([]), Factor, Return).
eq_multiply(equation([variable(A, X)|Tail1]), Factor, equation(List)) :-
Res is X * Factor, eq_multiply(equation(Tail1), Factor, equation([variable(A, Res)|List])).
希望您能帮助我找到我的错误, 谢谢!
答案 0 :(得分:0)
假设equation/1
术语的参数始终是一个列表(如您的示例中所示),您可以首先展开参数:
eq_multiply(equation(List), Factor, equation(Result)) :-
eq_multiply_list(List, Factor, Result).
eq_multiply_list/3
辅助谓词现在只需要遍历列表并对每个列表元素执行乘法运算。基本情况是当列表为空时:
eq_multiply_list([], _, []).
如果列表不为空,则处理列表的开头,然后处理列表的结尾:
eq_multiply_list([variable(A, X)| Tail1], Factor, [variable(A, Res)| Tail2]) :-
Res is X * Factor,
eq_multiply_list(Tail1, Factor, Tail2).
您的示例查询:
?- eq_multiply(equation([variable("a", 2), variable("b", 1)]), 3, MultipliedEquation).
MultipliedEquation = equation([variable("a", 6), variable("b", 3)]).