Prolog查询编写:基于串并联规则计算电阻总值
解答
问题1:可以通过定义规则封装中间结果,实现目标查询
完全可以。你可以把“40和10并联后与12串联”的中间计算逻辑封装成一个规则,之后在查询parallel(30,Rx,X)时结合这个规则,就能直接得到最终结果。
示例代码:
series(R1,R2,Re) :- Re is R1 + R2. parallel(R1,R2,Re) :- Re is ((R1 * R2) / (R1 + R2)). % 封装中间计算步骤:40与10并联,结果再和12串联 intermediate(Rx) :- parallel(40, 10, R_par), series(R_par, 12, Rx).
查询方式:
parallel(30, Rx, X), intermediate(Rx).
执行后会返回X = 12.0(40和10并联得8,8+12=20,20和30并联得12)。
如果想更直接,也可以提前算出中间结果定义成事实:
intermediate(20).
然后直接查询parallel(30, 20, X).即可,但用规则的好处是电阻数值变化时,无需手动重新计算中间值,灵活性更高。
问题2:无需额外定义的最简实现方式
如果不想新增规则或事实,直接把所有计算步骤链式写在查询里即可,这是最直接的方式:
parallel(40, 10, R1), series(R1, 12, R2), parallel(30, R2, X).
执行这个查询会直接返回最终总阻值X = 12.0。
内容的提问来源于stack exchange,提问作者l0ner9
相关产品推荐
相关产品推荐

