我目前正致力于实现一个标准的语义网络,而且我已经迷失了。我有一个全球助理名单:
(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 . (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
位置。