Python: 从 swiplserver 转换字典

Python: convert dictionary from swiplserver

我正在使用 swiplserver 在 python 中使用 prolog 查询。在该查询中,我得到了这种字典:

to_translate = {'A': 'p', 'B': '_', 'C': 'q', 'Z': {'→E': {'args': [['p', {'args': ['p', 'q'], 'functor': '→'}], 'q'], 'functor': '⊦'}}}

在 prolog 文件中,我刚刚定义了一些 xfy operators(例如 ⊦ 和 →)。我现在的目标是按以下方式翻译字典(与 prolog 的自然输出相同):

result = {'A': 'p', 'B': '_', 'C': 'q', 'Z': {'→E': '[p, (p → q)] ⊦ q'}}

如果 ⊦ 不在我的运算符列表中,结果将是:

result = {'A': 'p', 'B': '_', 'C': 'q', 'Z': {'→E': '⊦([p, (p → q)], q)'}}

我听说 swiplserver 使用 JSON 来生成字典本身。也许这是关键,而且我认为问题更容易解决。

希望你能给我一些快速提示或解决方案。

我想你问的是如何将 swiplserver 返回的 JSON 格式转换为 Prolog 字符串?

有一个 swiplserver 函数 json_to_prolog 可以执行此操作,但它目前仅生成 +(b, c) 之类的术语,而不是 b + c 这与您不完全相同正在寻找,但可能会有帮助?

from swiplserver import *

print(json_to_prolog({'args': [['p', {'args': ['p', 'q'], 'functor': '→'}], 'q'], 'functor': '⊦'}))

运行 给出:

'⊦'([p, '→'(p, q)], q)