我需要从KB中删除涉及特定常量的全部断言,同时保持该常量本身不变(例如“重新创建常量”)。
我可以使用哪个Cyc查询或SubL命令来实现这个目的?
Cyc KB – 研究版Cyc 4.0q。
回答:
有一个SubL函数可以做到这一点:
(ke-recreate-now CONSTANT)
它实际上会完全删除该常量,然后用相同的名称和GUID重新创建它。
如果你真正想要的是删除关于CONSTANT的大部分,但不是全部的断言,你需要以某种方式决定保留哪些。如果你有一组想要保留的谓词,你可以这样做:
(with-all-mts (do-gaf-arg-index (assert #$GeorgeWashington) (clet ((*the-cyclist* #$CycAdministrator) (keep? nil)) (cdolist (pred '(#$isa #$argIsa #$genls)) (pwhen (expression-find pred assert t) (csetq keep? t))) (punless keep? (ke-unassert-assertion-now assert)))))