写谓词和写函数(prolog / lisp)

时间:2018-01-14 16:57:34

标签: json prolog swi-prolog

下午好,我在Prolog中使用谓词,在Lisp中使用函数。

这是我的json-write谓词

json_write(JSON, FileName) :-
   open(FileName, write, Stream),
   writeq(Stream, JSON),
   close(Stream).

我还有另一个谓词json_load

json_load(FileName, JSON) :-
   open(FileName, read, S),
   read_string(S, _, Str),
   close(S),
   json_parse(Str, JSON).

所以问题是这个例子json_write(json_obj([/* stuff */]), ’foo.json’), json_load(’foo.json’, JSON).不起作用。

我知道它不起作用导致json_parse只解析像这样的对象{"nome":"Arthur","cognome":"Dent"}

所以,如果我调用json-write谓词,它会创建一个文件,内容具有这种格式,例如json_obj([("nome", "Arthur"), ("cognome", "Dent")])

{"nome":"Arthur","cognome":"Dent"}非常不同,json_parse失败。

教授。说谓词不会逆转。 他也说过这个 "No. We do not expect the json_write / 2 to convert the JSON object to a string and then print it. The thing is much simpler. The json_write / 2 takes a JSON object and prints it directly onto an output stream (*) descending recursively into its structure."

有什么想法吗?

谢谢你们

PS如果我们修复它,我需要一些帮助lisp函数应该以相同的方式工作

0 个答案:

没有答案