方案中的语义列表

问题描述 投票:0回答:1

我目前正致力于实现一个标准的语义网络,而且我已经迷失了。我有一个全球助理名单:

(define *database* '())

并尝试使用标准格式填充列表

((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)

你可以告诉我,我是新手,所以我有一些问题。

  1. 为什么cons会像它一样形成声明? (x.y)
  2. 例如,如何将多个部分添加到同一个对象中?
  3. 解决这个问题的步骤是什么?
scheme semantic-web predicate
1个回答
1
投票

列表是一连串的缺点。例如。如果你评估'(1 . (2 . (3 . ())))你得到(1 2 3),因为当读者读取虚线形式和列表形式时,打印机打印列表形式尽可能。例如。如果cdr是一对或()它省略.和一对括号。如果链中的最后一个元素不是(),那么它不是一个正确的列表,即使是打印也需要点形式。例如。 '(1 . (2 . 3))(1 2 . 3)

(list 1 2 3)(cons 1 (cons 2 (cons 3 '())))相同

为了修复你的代码你使用qazxsw poi的一些地方你应该使用qazxsw poi或添加更多cons,以便值只在list位置。

© www.soinside.com 2019 - 2024. All rights reserved.