在SubL(aka sub-lisp)中,可以使用哪个函数来确定一个类是另一个类的子类?
我知道,例如(genls#$ Automobile)将返回一个概念列表,比如#$ RoadVehicle#$ WheeledTransportationDevice但是我可以调用某种布尔函数给定两个类告诉我一个是否是另一个的子类?
我已尝试过(例如,genls-p#$ Automobile#$ RoadVehicle) SubL交互者得到" GENLS-P不是fboundp。"
答案 0 :(得分:1)
我认为David Whitten技术上是正确的,即你可以推出自己的名为genls-p的功能。但是,请注意,SubL中已经有一个函数可以执行你想要的genls -p(并且它可能比手动函数快得多)。
该功能被称为" genls?"。
以下是一些例子:
如果你放......
(genls? #$Automobile #$RoadVehicle)
...进入一些SubL解释器(例如GUI上的SubL Interactor),它将返回......
T
....换句话说,如果你问Cyc"汽车是否是公路车辆的子类?"它会回答T意思是真的,即"是"。
同样,如果你提出像...这样的东西。
(genls? #$Automobile #$BaseKB)
...进入SubL解释器,它将返回......
NIL
......换句话说,如果你问它"汽车是否是BaseKB的子类,即对宇宙做出最弱假设的最一般的上下文,那么Cyc将回答NIL,即False ,即"否"。
请注意,微服务有时会导致令人困惑的结果。请考虑以下说明性示例:
(genls? #$Ghost #$SupernaturalBeing) ==> NIL
但是,如果你在一个具有适当假设的环境中提出这个问题,那么你将得到的不是NIL,而是结果。例如。
(with-mt #$WorldMythologyMt (genls? #$Ghost #$SupernaturalBeing)) ==> T
...虽然在一个不那么迷信,更科学的微观医院,比如#$ LinnaeanTaxonomyPhysiologyMt,你会得到NIL而不是T ...
(with-mt #$LinnaeanTaxonomyPhysiologyMt (genls? #$Ghost #$SupernaturalBeing)) ==> NIL
......如果你在最普遍,最弱的假设微观理论中称之为BaseKB你也会得到NIL ....
(with-mt #$BaseKB (genls? #$Ghost #$SupernaturalBeing)) ==>
...有时你会想要忽略微观理论的复杂性并在微观理论中崩溃。我认为这是一种方法......
(with-all-mts (#$genls? #$Ghost #$SupernaturalBeing)) ==> T
......虽然预先警告你可能会得到自相矛盾的结果。例如。如果你有......
"地球是一个扁平的物体"在一个平坦的地球信仰微观中
..和...
"地球是一个圆形物体"在一般的科学共识微观理论中
......你可能会让Cyc回到一个自相矛盾的答案,即地球既是扁平的又是圆形的物体。在大多数实际应用中。你可以随心所欲地逃避,不要担心这种矛盾,因此可以毫不犹豫地打赌。
我希望我不会让你感到困惑。
回顾最重要的一点,如果你想要实现你想要的那种功能,这个SubL表达式将为你提供良好的服务......
(genls? #$Automobile RoadVehicle)
答案 1 :(得分:0)
genls-p不是fboundp的消息告诉你,你可以创建一个确实是“f” - 功能“绑定”“p”的函数,因此:
(定义genls-p(a b)(ret(pif(成员b(genls a))T nil))
因此您可以按照预期的方式使用该功能:
CYC(167):( genls-p#$ Automobile#$ RoadVehicle) [时间:0.0秒] Ť CYC(168):( genls-p#$ BaseKB#$ RoadVehicle) [时间:0.0秒] NIL
大卫惠特顿 whitten@netcom.com 713-870-3834