scheme中的语义列表

scheme中的语义列表,scheme,semantic-web,predicate,Scheme,Semantic Web,Predicate,我目前正在从事一项实现标准语义网络的工作,我已经超越了迷失。 我有一份全球助理名单: (定义*数据库*”()) 我正在尝试用标准表单填充列表,如下所示 ((hellipcopter (isa (air-vehicle)) (has-part (propeller door))) . . . 从声明中 (has-part helicopter propell

我目前正在从事一项实现标准语义网络的工作,我已经超越了迷失。 我有一份全球助理名单:

(定义*数据库*”())

我正在尝试用标准表单填充列表,如下所示

((hellipcopter (isa (air-vehicle))         
               (has-part (propeller door)))
               .
               . 
               .
从声明中

(has-part helicopter propeller)
(has-part helicopter door)
(isa helicopter air-vehicle)
这是我的尝试

    (define (process-relation rel)
       (set! *database* (cons (cons (cons (cadr rel) (car rel)) (caddr rel))*database*)))
以这种可怕的方式打印出来

       ((helicopter . has-part) . propeller)
       ((propeller . has-part) . blade)
正如你们所说,我对这个计划还不熟悉,所以我有一些问题

  • 为什么cons会像它那样形成声明?(x.y)
  • 例如,如何将多个零件添加到同一对象
  • 解决这个问题的步骤是什么

  • 清单是一连串的缺点。例如,如果你计算
    ”(1.(2.(3)()
    ,你会得到
    (1)(2)(3)
    ,因为当读者阅读虚线表单和列表表单时,打印机会尽可能打印列表表单。例如,如果
    cdr
    是一对或
    ()
    则省略
    和一对括号。如果链中的最后一个元素不是
    ()
    ,则它不是一个正确的列表,甚至打印时也需要点格式。例如,
    ”(1.(2.3))
    (12.3)

    (列表1 2 3)
    (cons 1(cons 2(cons 3’()))相同。


    要修复您使用的
    cons
    某些位置的编码,您应该使用
    list
    或添加更多
    cons
    ,以便值仅位于
    car
    位置

    这是有道理的。我不知道列表本身就是这样的。我的最后一个问题是如何将层添加到列表中。所以像直升机一样,haspart和isa@Ayleids您也许应该创建一个过程,该过程接受一个实例和一个语句,然后返回新的实例和语句。例如,
    (增加进入(直升机);=>(直升机(有部分螺旋桨))
    。主过程获取实例列表(数据库)并返回一个新数据库<代码>(更新db'()'(有部分直升机螺旋桨);==>(直升机(有部分螺旋桨))。好卢卡我搞不懂你说的增援进入是什么意思?@Ayleids,这是一个例子。我可以给你另一个
    (增援进入)(直升机(有部分螺旋桨))(isa直升机飞行器));=>(直升机(isa飞行器))(具有部分螺旋桨))
    。它将术语添加到结构中。