Как проверить, верно ли (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

Другие вопросы по тегам