Пролог: сохранение результата операции

только начал программировать на прологе, и у меня есть несколько проблем. Я хочу сохранить результат операции, например:

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 в калькуляторе) в другой операции. Является ли это возможным?


person SimoDev    schedule 11.06.2020    source источник


Ответы (1)


Если вы хотите, чтобы информация сохранилась после завершения программы (то есть возврата к Prolog REPL, также известному как верхний уровень), вы можете использовать предикаты asserta/2 и assertz/2.

См. этот раздел для SWI Prolog, он должен быть аналогичным для SICStus: База данных

В качестве альтернативы вы можете захотеть сохранить программу «живой» и хранить информацию в терме, который передается между предикатами. Ассоциативные списки library(assoc) или, для SWI Prolog, встроенные в словах или для этого можно использовать более простые структуры данных, такие как списки .

person David Tonhofer    schedule 11.06.2020