下午好,我在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函数应该以相同的方式工作