как проверить, верно ли (genls Automobile RoadVehicle) в SubL - PullRequest
0 голосов
/ 09 мая 2018

В SubL (он же sub-lisp) какую функцию можно использовать, чтобы определить, является ли один класс подклассом другого?

Я знаю это, например (genls # $ Automobile) вернет список таких понятий, как # $ RoadVehicle # $ WheeledTransproductionDevice, но есть ли какая-нибудь логическая функция, которую я могу вызвать, если два класса сообщают мне, является ли один подклассом другого?

Я пробовал (genls-p # $ Automobile # $ RoadVehicle), например, SubL интерактор и получить «GENLS-P не fboundp.»

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Полагаю, Дэвид Уиттен технически прав, то есть вы можете выполнить свою собственную функцию, называемую 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

... хотя имейте в виду, что вы можете получить противоречивые результаты. Например. Если бы у вас было ...

«Земля - ​​плоский объект» в «микротеории верований плоской земли»

.. и ...

«Земля - ​​круглый объект» в «Общей научной консенсусной микротеории»

... вы могли бы попросить Цикла ответить противоречивым ответом, что земля была как плоским, так и круглым объектом. В большинстве практических приложений. Вы можете просто не беспокоиться о таких противоречиях, и, таким образом, все-со-мтс - нормальная ставка.

Надеюсь, я вас не смутил.

Напомним, самый важный момент: если вы хотите достичь желаемой функциональности, это выражение SubL будет вам полезно ...

(genls? #$Automobile RoadVehicle)

0 голосов
/ 09 мая 2018

сообщение о том, что genls-p не является fboundp, говорит о том, что вы можете создать функцию, которая на самом деле является "f" -функциональной "связанной" "p" -дикратом, таким образом:

(определить genls-p (a b) (ret (pif (член b (genls a)) T nil))

, чтобы вы могли использовать функцию так, как вы ожидаете:

CYC (167): (genls-p # $ Automobile # $ RoadVehicle) [Время: 0,0 с] T CYC (168): (genls-p # $ BaseKB # $ RoadVehicle) [Время: 0,0 с] NIL

Дэвид Уиттен whitten@netcom.com 713-870-3834

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...