首页 > 解决方案 > Prolog:存储操作的结果

问题描述

刚开始用 prolog 编程,我遇到了一些问题。我想将结果存储在操作中,例如:

transformer(kilo,1000).
transformer(hecto,100).
transformer(deca,10).
transformer(unite,1).
transformer(deci,0.1).
transformer(centi,0.01).
transformer(milli,0.001).
transformerT(sec,1).
transformerT(min,60).
transformerT(h,3600).

plus(V1,U,V2,U,UniteType,R,U) :-
  dif(UniteType,temps),R is V1+V2. 
plus(V1,U1,V2,U2,UniteType,R,unite) :-   
  dif(UniteType,temps), 
  dif(U1,U2),  
  trans(U1,Res1),  
  trans(U2,Res2),  
  R is V1*Res1+V2*Res2.

我想存储此操作的结果以便稍后在另一个操作中调用它(如计算器中的 ANS 或 M 按钮)。可能吗?

标签: prologprolog-toplevel

解决方案


如果您希望信息在程序终止后仍然存在(即返回 Prolog REPL,又名顶级),您可以使用谓词 asserta/2 和 assertz/2。

有关 SWI Prolog,请参阅此部分,对于 SICStus 应该类似:数据库

或者,您可能希望保持程序“活动”并将信息存储在谓词之间传递的术语中。关联列表库(assoc)或者,对于 SWI Prolog,内置dicts或更简单的数据结构(如列表)可以用于此。


推荐阅读