Как проверить, верно ли (genls Automobile RoadVehicle) в SubL
В SubL (он же sub-lisp) какую функцию можно использовать, чтобы определить, является ли один класс подклассом другого?
Я знаю, что, например, (genls #$Automobile) вернет список таких понятий, как #$RoadVehicle #$WheeledTransproductionDevice, но есть ли какая-то логическая функция, которую я могу вызвать, если данные два класса сообщают мне, является ли один подклассом другого?
Я пробовал (genls-p #$Automobile #$RoadVehicle), например, в SubL-интеракторе, и получаю "GENLS-P не fboundp".
2 ответа
Я полагаю, что Дэвид Уиттен технически прав, то есть вы можете использовать свою собственную функцию, называемую genls-p. Однако, имейте в виду, что в SubL уже есть функция, которая делает то, что вы хотите, чтобы genls-p делал (и это, вероятно, намного быстрее, чем функция, созданная вручную).
Эта функция называется "genls?".
Вот некоторые примеры:
Если поставить....
(genls? #$Automobile #$RoadVehicle)
... в некоторый интерпретатор SubL (например, SubL Interactor в графическом интерфейсе), он вернется...
T
.... Другими словами, если вы спросите Cyc "Является ли автомобиль подклассом дорожного транспортного средства?" он ответит Т, что означает истина, то есть "да".
Точно так же, если вы положите что-то вроде...
(genls? #$Automobile #$BaseKB)
... в интерпретатор SubL, он вернется...
NIL
... Другими словами, если вы спросите его "Является ли автомобиль подклассом BaseKB, т.е. самым общим контекстом, который делает самые слабые предположения о вселенной", то Cyc ответит NIL, то есть False, то есть "Нет".
Обратите внимание, что микротеории могут иногда приводить к запутанным результатам. Рассмотрим следующие иллюстративные примеры:
(genls? #$Ghost #$SupernaturalBeing) ==> NIL
Однако, если вы зададите этот вопрос в контексте с соответствующими предположениями, убеждениями о мире, в результате вы получите не NIL, а T. Например
(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
... хотя имейте в виду, что вы можете получить противоречивые результаты. Например, если бы вы имели...
"Земля - это плоский объект" в "микротеории теории плоской земли"
..а также...
"Земля - круглый объект" в "Общей научной консенсусной микротеории"
... вы можете попросить Цикла ответить противоречивым ответом, что земля была как плоским, так и круглым объектом. В большинстве практических приложений. Вы можете просто смириться с тем, чтобы не беспокоиться о таких противоречиях, и, таким образом, с all-all-mts это хорошая ставка.
Надеюсь, я вас не смутила.
Напомним, самый важный момент: если вы хотите достичь желаемой функциональности, это выражение SubL будет вам полезно...
(genls? #$Automobile RoadVehicle)
Сообщение о том, что genls-p не является fboundp, говорит о том, что вы можете создать функцию, которая действительно является "f" -функциональной "bound" "p" -redicate, таким образом:
(определить genls-p (ab) (ret (pif (member b (genls a)) T nil))
так что вы можете использовать функцию так, как вы ожидаете:
CYC (167): (genls-p # $ Automobile # $ RoadVehicle) [время: 0,0 с] T CYC(168): (genls-p #$BaseKB #$RoadVehicle) [время: 0,0 с] NIL
Дэвид Уиттен Уиттен@netcom.com 713-870-3834