要解决Amzi Prolog在被调用时不会传递值的问题,可以使用全局变量或者上下文对象来传递值。下面是一个使用上下文对象的示例代码:
% 定义上下文对象
:- dynamic(context/1).
% 定义谓词,将值存储到上下文对象中
set_value(Key, Value) :-
retractall(context(Key,_)),
assert(context(Key, Value)).
% 定义谓词,从上下文对象中获取值
get_value(Key, Value) :-
context(Key, Value).
% 定义一个简单的规则,使用上下文对象中的值进行计算
add_values(Key1, Key2, Result) :-
get_value(Key1, Value1),
get_value(Key2, Value2),
Result is Value1 + Value2.
使用上述代码,可以按照以下步骤传递值:
set_value/2谓词将值存储到上下文对象中,例如set_value(a, 10)将键值对a-10存储到上下文对象中。get_value/2谓词从上下文对象中获取值,例如get_value(a, Value)将获取键a对应的值。add_values(a, b, Result)将获取键a和b对应的值,并计算它们的和。使用上述方法可以在Amzi Prolog中传递值并进行计算。请注意,上下文对象是一个全局的存储区域,可以在整个程序中共享和访问。