如何将prolog谓词转换为JSON?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将prolog谓词转换为JSON?相关的知识,希望对你有一定的参考价值。

我想知道是否有办法在Swi-Prolog中返回一个Json对象,这样谓词名称就成了键,实例化的变量就成了值。例如:

get_fruit(JS_out):-
    apple(A),
    pear(P),
    to_json(..., JS_out). # How to write this part?

apple("Gala").
pear("Bartlett").

我期待JS_out

JS_out = {"apple": "Gala", "pear": "Bartlett"}.

我无法通过使用prolog_to_json/3或其他内置函数来弄清楚如何实现这一目标。虽然在阅读Json进入Prolog时失去了帖子,但我找不到很多相反的方式。任何帮助表示赞赏!

答案

给出如图所示的硬编码事实,简单的解决方案是:

get_fruit(JS_out) :- apple(A), pear(P), JS_out = {"apple" : A, "pear": B}.

但是,在Prolog中,您不需要额外的变量。你可以这样写:

get_fruit({"apple" : A, "pear": B}) :- apple(A), pear(P).

您可以根据任何类型的两种结果来概括这一点:

get_fruit(Fruit1, Fruit2, {Fruit1 : A, Fruit2 : B}) :-
    call(Fruit1, A),
    call(Fruit2, B).

随着更多的工作,它可以推广到任何数量的水果。

顺便说一句,认为is/2是某种通用赋值运算符是一个普通的初学者的错误,但事实并非如此。它严格用于算术表达式求值,并假设第二个参数是使用Prolog支持的算术运算符的完全实例化和可评估的算术表达式。第一个参数是变量或数值。任何不符合这些标准的内容将始终失败或生成错误。

以上是关于如何将prolog谓词转换为JSON?的主要内容,如果未能解决你的问题,请参考以下文章

WSO2:将CSV消息转换为json wso2 esb。在prolog中出现意外字符'“'(代码34)失败;预期'

如何阅读prolog中的谓词

Prolog:如何删除谓词中的对称值

Prolog 中的“行为良好的谓词”是啥?

Prolog 中如何表示谓词逻辑?

Prolog - 将单词分成单独的字母