自从我使用 LISP 以来已经有一段时间了。我现在正在使用它来制作一个属性列表来表示语义网络。不过,我似乎无法弄清楚这个基本问题,它目前阻碍了所有进展。
我们期望的输入类型如下:
(FACT (IS-A SEAT1 SEAT))
(FACT (IS-A L1 LEG))
(FACT (IS-A L2 LEG))
(FACT (IS-A L3 LEG))
仅以第一个为例。首先,我对如何在另一个这样的函数中调用一个函数有点困惑。我最初的想法是创建一个名为 fact 的函数并使用 cond 语句来查看它是使用“is-a”还是“connected”(另一种可能性),但在“is-a”或“连接”,我不确定我会如何处理。
为了至少看看我是否理解了基本概念,我决定直接跳到“is-a”部分。这基本上应该是创建对象。
(defun is-a (name type)
(setf (get type 'name) name)
)
理想情况下这会起作用,但为了实际调用该函数,您需要将引号运算符放在参数前面,因为它们不是变量。所以调用看起来像:
(is-a 'seat1 'seat)
如果没有这些引号,CLISP 会抱怨该变量没有价值。那么,如果没有引号,我将如何制作可以在输入中完全读取的内容?