JSON的SWI Prolog语法

JSON的SWI Prolog语法,json,prolog,swi-prolog,Json,Prolog,Swi Prolog,我盯着swi prolog手册看,不懂语法()中的一些内容,也找不出合适的搜索词。 这是什么意思name='Demo term', 这个呢[day=@null 这是什么?members=[1,2,3] 这些是特殊语法还是奇怪的原子?这种语法其实没有什么特别之处: json/1是一个复合术语,列表是唯一的参数 该列表包含条目 name='Demo term' created=json([day=@null,month='12',year=2007]) confirm=@true members=

我盯着swi prolog手册看,不懂语法()中的一些内容,也找不出合适的搜索词。 这是什么意思
name='Demo term',
这个呢<代码>[day=@null 这是什么?
members=[1,2,3]

这些是特殊语法还是奇怪的原子?

这种语法其实没有什么特别之处:

json/1
是一个复合术语,列表是唯一的参数

该列表包含条目

  • name='Demo term'
  • created=json([day=@null,month='12',year=2007])
  • confirm=@true
  • members=[1,2,3]
显然试图模拟映射关键字->值:

  • 关键字
    name
    与atom“Demo term”相关联(用单引号引起来,因为它包含空格并以大写开头)
  • 关键字
    created
    与复杂的复合术语
    json([day=@null,month='defect',year=2007])相关联。
  • 关键字
    confirm
    与复合词
    @true
    关联,该复合词写得更好
    @(true)
  • 关键字
    成员
    与列表
    [1,2,3]
请注意下面的描述:

JSON常量true和false与JPL一样被映射到@(true)和@(false)。 JSON常量null映射到Prolog术语@(null)

虽然一个人必须写作

json([ name='Demo term',
       created=json([day= @null, month='December', year=2007]),
       confirmed= @true,
       members=[1, 2, 3]
     ])
因此,也许这个例子是有问题的

您可以在SWI Prolog的命令行中执行此操作,以便在中打印术语 规范模式(为可读性增加了换行符;我认为write_canonical也应该正确缩进,但遗憾的是它没有这样做):

X='@'(true).
?- write_canonical(json([ name='Demo term',
|           created=json([day= '@'(null), month='December', year=2007]),
|           confirmed= '@'(true),
|           members=[1, 2, 3]
|         ])).
json([=(name,'Demo term'),
      =(created,json(
                  [=(day,@(null)),
                   =(month,'December'),
                   =(year,2007)]
                )
       ),
      =(confirmed,@(true)),
      =(members,[1,2,3])])
true.