=========================================== run в CLIPS? Команда run (run []) Стартира изпълнението на правилата (работния цикъл на интерпретатора на правилата). Ако незадължителният параметър има положителна стойност, работата на интерпретатора завършва след посочения брой изпълнения на правила или когато конфликтното множество стане празно. =========================================== ?DERIVE If the keyword ?DERIVE is used for the default value, then a default value is derived from the constraints for the slot (see section 11.5 for more details). By default, the default attribute for a slot is (default ?DERIVE) спецификаторът ?NONE ? If the keyword ?NONE is used for the default value, then a value must explicitly be assigned for a slot when an assert is performed. It is an error to assert a template fact without specifying the values for the (default ?NONE) slots. =========================================== елемент от тип forall в CLIPS? Елемент на условието от тип forall Служи за проверка дали винаги когато се удовлетвори даден елемент на условието, се удовлетворява също и група други елементи на условието. Синтаксис: (forall +) =========================================== характеристика на 3 типа unit-и в KRL? Всеки елемент (unit) в KRL се причислява към някакъв тип (category type), който може да бъде елемент на следното множество: Basic, Abstract, Specialization, Individual, Manifestation (проява), Relation, Proposition. Abstract, Basic и Specialization Елементите от тези три типа се използват за описание на категории като Person, Integer и др. Те се използват основно като прототипи за (в) перспективи. Разликата между тях е съществена главно от гледна точка на съпоставянето по образец в KRL (за matcher-а на KRL). Категориите от тип Basic (базов тип) представят прости непресичащи се части на света (предметната област) чрез различни видове обекти (например: dog, bacteria, ... ). Matcher-ът на KRL предполага, че не съществуват индивиди, които принадлежат едновременно на повече от един базов тип. Специализациите (категориите от тип Specialization) представят различни (по-нататъшни) подразделения на даден базов тип (като например: Poodle, E. Coli и др.). Всеки прототип от тип Specialization (т.е. всеки специализиран прототип) има дескриптори и процедури, асоциирани към тях, които са по- специфични от тези, свързани със съответния базов тип. Често описанието на даден специализиран прототип служи по същество за описание на определен подклас на даден базов тип (клас) или друга специализация. Абстрактните категории (категориите от тип Abstract) обикновено се използват за описание на абстрактни понятия (например: action, living thing, ...). За тези абстрактни понятия се задават съответни дескриптори и процедури, които могат да се наследяват от обектите, описани чрез перспектива със (по отношение на) съответния абстрактен прототип. Индивидуални елементи (елементи от тип Individual) Използват се за описание на конкретни обекти. В процеса на съпоставяне (на работа на matcher-а на KRL) се предполага, че даден индивидуален обект не може да бъде съпоставен с друг (различен от него) индивидуален обект. Определянето на това, кои обекти ще бъдат описани чрез елементи от тип Individual, се извършва конкретно за всяка предметна област в зависимост от типа на решаваните задачи (в зависимост от типа на логическите изводи, които предстои да се извършват). Елементи от тип Manifestation ("проява") Използват се с цел групиране в едно цяло на множество от описания, които принадлежат на някакъв (конкретен) обект. Най-често това се прави в случаите, когато конкретният обект, който е носител на някакви (известни) свойства, не е известен (когато този обект се дефинира чрез известните или характерните му свойства). Пример: криминалните истории, в които е известно, че в къщата има убиец (известни са много от "свойствата" (характеристиките) на убиеца, но не е известно кой (индивид) е убиецът). В такъв случай убиецът може да бъде описан чрез елемент от тип "проява", с който не е асоцииран конкретен индивид. Релации (relations) и твърдения (propositions) С помощта на елементи от тип Relation се описват релации (или предикати) като абстрактни отношения. Елементите от тип Proposition представляват конкретни екземпляри (instantiations) на релации (твърдения, свързани със (отнасящи се до) съответни релации). Обикновено истинностната стойност на дадено твърдение се задава в явен вид (а не е логическо следствие от съдържанието на базата от знания). ====================================== манипулатори на съобщения от тип around? Типове манипулатори на съобщения primary: извършва основната работа за съобщението; before: извършва подготвителни (предварителни) действия преди да бъде изпълнен primary манипулаторът; after: извършва допълнителни (заключителни) действия след изпълнението на primary манипулатора; around: дефинира подходяща среда за изпълнението на останалите манипулатори. Ред на изпълнение на различните типове манипулатори: around, before, primary, after. Objects are manipulated by sending them messages via the function send. The result of a message is a useful return- value or side- effect. A defmessagehandler is a construct for specifying the behavior of a class of objects in response to a particular message. The implementation of a message is made up of pieces of procedural code called messagehandlers (or handlers for short). Each class in the class precedence list of an object's class can have handlers for a message. In this way, the object's class and all its superclasses share the labor of handling the message. Each class's handlers handle the part of the message which is appropriate to that class. Within a class, the handlers for a particular message can be further subdivided into four types or categories: primary, before, after and around. The intended purposes of each type are summarized in the chart below: Type Role for the Class primar Performs the majority of the work for the message y before Does auxiliary work for a message before the primary handler executes after Does auxiliary work for a message after the primary handler executes around Sets up an environment for the execution of the rest of the handlers Before and after handlers are for side- effects only; their return values are always ignored. Before handlers execute before the primary ones, and after message- handlers execute after the primary ones. The return value of a message is generally given by the primary message- handlers, but around handlers can also return a value. Around message- handlers allow the user to wrap code around the rest of the handlers. They begin execution before the other handlers and pick up again after all the other message- handlers have finished. A primary handler provides the part of the message implementation which is most specific to an object, and thus the primary handler attached to the class closest to the immediate class of the object overrides other primary handlers. Before and after handlers provide the ability to pick up behavior from classes that are more general than the immediate class of the object, thus the message implementation uses all handlers of this type from all the classes of an object. When only the roles of the handlers specify which handlers get executed and in what order, the message is said to be declaratively implemented. However, some message implementations may not fit this model well. For example, the results of more than one primary handler may be needed. In cases like this, the handlers themselves must take part in deciding which handlers get executed and in what order. This is called the imperative technique. Around handlers provide imperative control over all other types of handlers except more specific around handlers. Around handlers can change the environment in which other handlers execute and modify the return value for the entire message. A message implementation should use the declarative technique if at all possible because this allows the handlers to be more independent and modular. A defmessage- handler is comprised of seven elements: 1) a class name to which to attach the handler (the class must have been previously defined), 2) a message name to which the handler will respond, 3) an optional type (the default is primary), 4) an optional comment, 5) a list of parameters that will be passed to the handler during execution, 6) an optional wildcard parameter and 7) a series of expressions which are executed in order when the handler is called. The return- value of a message- handler is the evaluation of the last expression in the body. ============================================= Обяснете предназначението на манипулаторите на съобщения от тип primary в CLIPS primary: извършва основната работа за съобщението; ============================================= Стратегии за разрешаване на конфликти в системите, основани на правила? Посочи 3 стратегии в CLIPS. Стратегии за разрешаване на конфликтите в CLIPS •Depth Strategy •Breadth Strategy •Simplicity Strategy •Complexity Strategy •LEX Strategy •MEA Strategy •Random Strategy Depth Strategy: новоактивираните правила се поставят в конфликтното множество над всички правила със същия приоритет; •Breadth Strategy: новоактивираните правила се поставят в конфликтното множество под всички правила със същия приоритет; •Simplicity Strategy: новоактивираните правила се поставят над всички правила със същия приоритет в конфликтното множество, които имат същата или по-голяма специфичност; Complexity Strategy: новоактивираните правила се поставят над всички правила със същия приоритет в конфликтното множество, които имат същата или по-малка специфичност; •LEX Strategy: прилага се стратегията на OPS5 със същото име (критерии за наредба сред правилата с един и същ приоритет: актуалност, специфичност); MEA Strategy: прилага се стратегията на OPS5 със същото име (преди прилагането на критерите, валидни за LEX: избор на правило, първият образец в лявата страна на което е съпоставим с най-късно създаден факт); •Random Strategy: всички активиращи записи получават случайни номера, които се използват за определяне на реда им сред активиращите записи, съответни на правила с един и същ приоритет. ============================================================= комада reset При изпълнение на командата reset глобалните променливи възстановяват оригиналните си стойности. ================================= Правила за намиране на по-приоритетния от два приложими метода 1.По-специфичното ограничение по тип (върху типа) за даден параметър има приоритет. 2.Параметър с quiery ограничение има по-висок приоритет от такъв без quiery ограничение. 3.Задължителен параметър има приоритет пред незадължителен. 4.Методът с по-голям брой задължителни параметри е по-приоритетен. 5.Метод, който няма незадължителен параметър, е по-приоритетен от метод, който има незадължителен параметър. 6.Метод, който е дефиниран преди друг метод, има приоритет. Пример 1 (defmethod f ((?a NUMBER STRING))) ;;; #1 (defmethod f ((?a INTEGER LEXEME))) ;;; #2 Ред: #2, #1 (INTEGER е подклас на NUMBER). Пример 2 (defmethod f ((?a MULTIFIELD STRING))) ;;; #1 (defmethod f ((?a LEXEME))) ;;; #2 Ред: #2, #1 (MULTIFIELD и LEXEME са несравними, #2 има по-малко елементи в списъка на класовете). Пример 3 (defmethod f ((?a INTEGER LEXEME))) ;;; #1 (defmethod f ((?a STRING NUMBER))) ;;; #2 Ред: #1, #2 (съответните двойки от класове са несравними, определящ е редът на дефиниране на двата метода). Забележка. Класът LEXEME е дефиниран като обединение на SYMBOL и STRING. Конструкции за работа с генерични функции (get-defgeneric-list) Връща списък от имената на всички генерични функции, които са дефинирани до момента. (get-defmethod-list []) Връща списък от дефинициите на всички дефинирани методи (за дадена генерична функция). (list-defmethods []) Връща списък от всички дефинирани методи (за дадена генерична функция). (call-next-method) Извиква следващия по специфичност метод, който е приложим към същите фактически параметри, които е получил текущо изпълняваният метод. (override-next-method *) Измежду методите, които са по-общи от текущо изпълнявания, се избира и изпълнява (върху новите фактически параметри) най-специфичният метод, който е приложим към новите фактически параметри. (call-specific-method *) Тази функция позволява да бъде изпълнен конкретен метод (който се задава чрез неговия индекс), без да има значение неговата специфичност. Посоченият метод трябва да бъде приложим към дадените фактически параметри. ================================= 9. Каква е ролята на незадължителния (wildcard) параметър в дефиницията на функция в CLIPS? Дайте пример A deffunction may accept exactly or at least a specified number of arguments, depending on whether a is used or not. The regular parameters specify the minimum number of arguments that must be passed to the deffunction. Each of these parameters may be referenced like a normal single-field variable within the actions of the deffunction. If a wildcard parameter is present, the deffunction may be passed any number of arguments greater than or equal to the minimum. If no wildcard parameter is present, then the deffunction must be passed exactly the number of arguments specified by the s. All arguments to a deffunction that do not correspond to a regular parameter are grouped into a multifield value that can be referenced by the wildcard parameter. The standard CLIPS multifield functions, such as length and nth, can be applied to the wildcard parameter. deffunction print-args (?a ?b $?c) (printout t ?a " " ?b " and " (length ?c) " extras: " ?c crlf)) CLIPS> (print-args 1 2) 1 2 and 0 extras: () CLIPS> (print-args a b c d) a b and 2 extras: (c d) ========================================================= (defclass [] (is-a +) [] [] * *) ::= (role concrete|abstract) ::= (pattern-match reactive|non-reactive) 9.3.2.1 Abstract and Concrete Classes An abstract class is intended for inheritance only, and no direct instances of this class can be created. A concrete class can have direct instances. Using the abstract role specifier in a defclass will cause COOL to generate an error if makeinstance is ever called for this class. If the abstract or concrete descriptor for a class is not specified, it is determined by inheritance. 9.3.2.2 Reactive and NonReactive Classes Objects of a reactive class can match object patterns in a rule. Objects of a nonreactive class can not match object patterns in a rule and are not considered when the list of applicable classes are determined for an object pattern. An abstract class cannot be reactive. If the reactive or non- reactive descriptor for a class is not specified, it is determined by inheritance. ========Фасети============ Фасета Storage Синтаксис: (storage local | shared) Стойност на фасетата local: стойността на слота се съхранява с (в) екземпляра. Стойност на фасетата shared: стойността на слота се съхранява с (в) класа. Фасета Access Синтаксис: (access read-write | read-only | initialize-only) Стойност read-write: означава, че в и от слота може да се пише и чете. Стойност read-only: означава, че от слота може само да се чете. Стойност initialize-only: означава, че слотът по принцип е read-only, с изключение на моментите на създаване или инициализиране на екземпляр Фасета Inheritance Propagation Синтаксис: (propagation inherit | no-inherit) Стойност inherit: означава, че съответният слот в описвания клас може да бъде наследяван от екземпляри на други класове, които наследяват от този клас. Стойност no-inherit: означава, че само директните екземпляри на описвания клас ще получават съответния слот. Фасета Source Синтаксис: (source exclusive | composite) Стойност exclusive: при получаването на слотове от класовете-предшественици по време на създаването на екземпляри се вземат фасетите на най-специфичния клас, който е носител на слота, и се присвояват стойности по подразбиране на всички неспецифицирани фасети. Стойност composite: фасетите, които не са специфицирани явно за най-специфичния клас, който дефинира слота, се вземат от следващия по специфичност родителски клас. Фасета Pattern Match Reactivity Синтаксис: (pattern-match reactive | non-reactive) Стойност reactive: слотът участва в съпоставянето и всяка промяна на стойността му (за даден екземпляр на определен реактивен клас) може отново да предизвика съпоставяне. Стойност non-reactive: промените в стойността на слота не предизвикват ново съпоставяне. Фасета Visibility Синтаксис: (visibility private | public) Стойност private: определя, че само манипулаторите на съобщения на текущо дефинирания клас имат право на директен достъп до слота. Стойност public: определя, че право на директен достъп до слота имат също и манипулаторите на съобщения на суперкласовете и подкласовете, които наследяват този слот. Фасета Create-Accessor Синтаксис: (create-accessor ?NONE | read | write | read-write) Предизвиква автоматично създаване на експлицитни манипулатори на съобщения за четене и/или писане на/в дадения слот. По подразбиране не се създават никакви манипулатори за достъп. Фасета Override-Message Синтаксис: (override-message ?DEFAULT | ) По подразбиране функциите на COOL, които присвояват стойности на слотове чрез използване на съобщения (make-instance и др.), се опитват да присвоят стойност на слота с помощта на съобщението, наречено put-. Ако потребителят е избрал да използва не стандартните манипулатори за достъп, а други функции (манипулатори за достъп), трябва да използва разглежданата фасета. Тя определя какво съобщение ще се изпраща вместо стандартното. Constraint фасети Служат за задаване на ограничения върху стойността на слота, които могат да бъдат от няколко вида: •допустим тип (type ) •допустими стойности (allowed-values ) Служебната дума values може да бъде заменена с numbers, integers, floats, symbols, strings и т.н. допустим диапазон на числовите стойности (range ) Задава долната и горната граница на интервала, на който могат да принадлежат числовите стойности, записани в съответния слот. е или число, или ?VARIABLE (?VARIABLE означава -∞ като лява граница на дефиниционния интервал или +∞ като дясна граница на този интервал). допустим брой полета на multifield слот (cardinality ) Ограничава броя (от – до) на полетата, от които могат да бъдат съставени стойностите на даден multifield слот. Тук е или число, или ?VARIABLE (?VARIABLE означава 0 като минимален брой полета или +∞ като максимален брой полета). По премълчаване броят на полетата от стойността на един multifield слот е от 0 до +∞. Допълнително (quiery) ограничение: булев тест, дефиниран от потребителя, който трябва да бъде удовлетворен от съответния фактически параметър. ::= | ==============================онтологията Cyc============================================ 14. Обяснете предназначението на онтологията Cyc. Основни характеристики на онтологията Cyc • Цел: систематизиране на основното знание за света. Cyc е огромно хранилище от знание - знание, което е толкова очевидно, че е объркващо или дори обидно да се предостави в явен вид на някой човек. Създателят на Cyc Douglas B. Lenat смята, че “това, което липсва на компютрите, е огромното количество от факти, които хората знаят и използват интуитивно и без които животът ни би бил неинтелигентен. Липсата на това знание прави интелигентността на компютрите повърхностна.” • Обхват: най-всеобхватната съществуваща онтология. Опитва се да създаде модел на човешкото знание за света. Целта на разработчиците й е много нови приложения да използват горния модел на онтологията, като към него прикачат клонове, описващи областите на тези приложения. • Практически приложения: онтологията Cyc е използвана в системата за обработка на естествен език на Cycorp, чиято цел е превод от естествен език към езика CycL. Използвана е още за извличане на информация в системата Cyccess. В областта на симулациите и моделирането има създаден модел на човек, който също използва тази онтология Основни компоненти на Cyc • База от знания: формално представяне на голяма част от основното човешко знание за света, включващо факти, правила и евристики, улесняващи извършването на заключения за обекти и събития от ежедневния живот. Средата за представяне е формален език, наречен CycL. Базата от знания се състои от понятия, които формират речника на езика CycL, и твърдения, свързващи понятията. • Машина за логически извод: машината за извод на Cyc извършва дедуктивен извод (на базата на Modus Ponens, Modus Tolens, квантифициране и др.) в съчетание с добре познатите от Изкуствения интелект механизми като наследяване и автоматична класификация. С помощта на подходящи евристики Cyc извършва търсене върху множество от твърдения по метода Best-first. От друга страна използването на микротеории ограничава пространството на търсене и оптимизира извода. • Език за представяне на знания: CycL е гъвкав език за представяне на знания. Той е съществено разширение на логиката от първи ред, като се справя с равенство, сколемизация, извод по подразбиране и някои характерни неща за логика от втори ред (в някои случаи е разрешено квантифициране на предикати, цялостни твърдения могат да се появяват като части от други твърдения и др.). Подходящи за CycL са твърдения относно затворен свят. • Обработка на естествен език (CycNL): Общото знание позволява на Cyc да се доближи до способността на човека да чете и прави изводи от текст на английски език. ===========Ontologies======== ОСНОВНИ ОПРЕДЕЛЕНИЯ Онтология (от древногръцки: онтос – битие, съществуване; логос – учение, наука) е термин, определящ науката за битието, за съществуващото, в отличие от гносеологията – науката за познанието. Терминът “онтология” в съвременната философска литература се използва за означаване на определена система от категории, които са следствие от определена система от възгледи (определена гледна точка) за света. В литературата по изкуствен интелект “онтология” е термин, който се използва за означаване на формално представени знания на основата на някаква концептуализация. Концептуализацията предполага описание на множество от обекти и понятия, знания за тях и връзки между тях. Според Грубер онтология се нарича експлицитната спецификация на концептуализацията. Формално онтологията се състои от термини, организирани в таксономия, техните определения и атрибути, а също и свързаните с тях аксиоми и правила за извод. Често множеството от предположения, съставящи онтологията, има формата на логическа теория от първи ред, в която термините от речника са имена на унарни и бинарни предикати, наричани съответно концепти (категории) и отношения. В най- простия случай онтологията описва само йерархията добавят подходящи аксиоми за изразяване на други отношения между концептите и за ограничаване на предполагаемите им интерпретации. В този смисъл онтологията е база от знания, описваща факти, за които се предполага, че са винаги верни в рамките на определена взаимна общност на основата на общоприетия смисъл на използвания речник. Още по-конкретно е дефинирано понятието онтология в известния проект Ontolingua на Стенфордския университет. Там се предполага, че онтологията е експлицитна спецификация на определена тема. Този подход предполага формално и декларативно представяне на някаква тема, което включва речник (или списък на константи) за насочване към термините от предметната област, ограничения върху общността на термините, логически твърдения, които ограничават интерпретацията на термините и това, как те се отнасят един към друг. В специализираната литература напоследък се налага следното определение: онтологиите са БЗ от специален тип, които могат да се “четат” и разбират, да се отделят от разработчика и/или физически да се поделят между техните потребители. Всяка онтология се основава на някаква концептуализация, но една концептуализация може да служи за основа на различни онтологии и различни БЗ могат да отразяват една и съща онтология. В този смисъл понятието онтология се дефинира от някои автори в контекста на споделянето на знания. Така например според Грубер онтологиите са споразумения (agreements) относно споделените концептуализации. Споделените концептуализации включват структури от понятия за моделиране на знанията за дадена област, протоколи със специфично съдържание за комуникация между взаимодействащите си агенти и споразумения за представянето на конкретни теории за дадена област. В контекста на споделянето на знания онтологиите са специфицирани под формата на дефиниции в представящи ги речници. В най-простия случай те се състоят от йерархии на типове, специфициращи класове, и релации между тях. ==============================KRL========================================== 16. Избройте и характеризирайте накратко поне три типа дескриптори в езика KRL. Всяко описание се състои от един или няколко дескриптора. Например, описанието на даден обект от някаква сцена може да включва дескриптори, съответни на: "предметът, който е съседен на масата", "нещо, изработено от дърво", "нещо, боядисано в кафяво", "един стол" и др. Някои от тези дескриптори означават факти, които могат да бъдат разглеждани като допълнителни твърдения за съответните обекти, докато други дескриптори служат за означаване на различни гледни точки за описание чрез сравнение. Така всяко описание на дадено понятие (обект) може да бъде комбинация от различни типове описания (дескриптори), които включват: • осигуряване (избор) на уникален идентификатор (избор на подходящо име като например "Boston"); • присъединяване (причисляване) на даден обект към определена категория (например: "is a city"); • означаване на ролята на обекта в някакъв сложен обект или събитие (например: the "destination" of a particular trip, т.е. "крайната точка" на дадено пътуване); • означаване (формулиране) на релация, в която обектът участва (например: being "to the north of Providence"); • включване на (сложна) логическа формула, която има стойност "истина" за дадения обект (напримeр: "Either this person must be over 65, or a widow or widower with dependent children."); • описание на дадения обект в термините на принадлежност към определено множество или описание на дадено множество чрез обектите, от които се състои то; • комбиниране на някои от горните типове дескриптори в описания, зависещи от времето (time-dependent descriptions), например: "the place you are today". ТИПОВЕ ДЕСКРИПТОРИ В KRL Всеки дескриптор в дадено описание на KRL задава определена (независима от другите) характеристика на съответния обект. Всеки от допустимите в KRL типове дескриптори съответства на определен естествен подход за описание на концептуални обекти. В различните типове дескриптори се използват определени ключови думи (като например: a, the, from, which, ... ), които се основават на аналогия със съответни прости фрази на английски език. При описанието на даден (концептуален) обект често се използват различни типове дескриптори, които съответстват на различни аспекти (гледни точки) на това описание. В тези описания, в които се използват различни типове дескриптори, обикновено част от информацията се дублира (т.е. в KRL се работи обикновено с редундантна информация). Пример. Понятието "ерген" (bachelor) може да бъде описано по няколко начина: - може да има прототипен елемент Bachelor и конкретен индивид, описан чрез (a Bachelor with ...); - може да бъде дефиниран едноместен предикат IsBachelor (неговата дефиниция би могла да включва например специална процедура - тест за ергенство). Тогава даден индивид - ерген моге да бъде описан с използване на предиката (which IsBachelor); - ергенството може да бъде описано косвено (индиректно) с помощта на прототипи MalePerson и Adult и предикат IsMarried например чрез описанието {(a MalePerson) (an Adult) (NOT (which IsMarried))}; - може да бъде дефиниран елемент (unit) Marriage със слотове "съпруг" (malePartner) и "съпруга" (femalePartner) и да бъде използвано описание от следния вид: {(a MalePerson) (an Adult) (NOT (the malePartner from (a Marriage)))}. Следва списък на допустимите типове дескриптори в KRL. ````````````` Директен указател (direct pointer) Формат: име на unit, число, низ, ‘<израз на езика Лисп> Употреба: указател към unit или данни, включен директно в описанието. Служи за означаване на конкретен (уникален) идентификатор. Примери: Block17, PaloAlto, 356, "a string", ‘(A PIECE (OF LIST) STRUCTURE) `````````` Перспектива (perspective) Формат: (a with = ... = ) Употреба: причислява даден обект към дадена категория. Сравнение на текущия обект с прототипа и по-нататъшно уточняване на този обект чрез конкретизация на някои негови слотове. Пример: (a Trip with destination = Boston airline = TWA) ````````````````` Спецификация (specification) Формат: (the from ) Употреба: определя (специфицира) текущия обект в термините на неговата роля в дадена перспектива или прототип: . Определя някаква роля в комплексен обект или събитие (например: the "destination" в дадено конкретно пътуване (trip)). Пример: (the age from Person ThisOne) Това е част от описанието на unit с име Traveller: [Traveller UNIT Specialization ... ] Тук Person е unit със следната дефиниция: [Person UNIT Basic ... ... ] Така в нашия пример спецификацията (the age from Person ThisOne) означава слота age от описанието на този (същия) Traveller като специализация на базовия тип Person. ```````````````````````````````````` Предикат (predication) Формат: (which .) Употреба: описва релация, в която участва обектът. Начин за описание на даден обект в термините на някаква релация и нейните аргументи. Позволява включване на специални процедури. Примери: (which Owns (a Dog)) (which IsBetween Block17 (a Pyramid)) ``````````````````````````````````````` Булев дескриптор (logical, boolean) Формат: (OR.) или (XOR.) или (NOT ) Употреба: задава проста логическа връзка. Конюнкцията (AND) се задава неявно - всяко описание е конюнкция от съответните дескриптори (затова няма нужда от специален дескриптор за конюнкция). Примери: (OR (a Dog) {(a Cat) (which hasColor Brown)}) (NOT (a Pet with owner = (a Student))) ````````````````````````````` Рестрикция (restriction) Формат: (theOne ) Употреба: маркира съответното описание като достатъчно за означаване (определяне, цитиране) на единствен обект в дадения контекст. Пример: (theOne {(a Mouse) (which Owns (a Dog))}) ``````````````````````````````````````````````````````` Селекция (selection) Формат: (using selectFrom ~ ... ~ otherwise ) Употреба: декларативна форма, която съответства на операторите от типа на CASE или SELECT в езиците за програмиране. `````````````````````````````````````````````````````` Описание на множество (set specification) Формат: (SetOf ) или (In.) или (Items.) или (NotItems.) или (AllItems.) или (ListOf.) или (Sequence.) Употреба: тези дескриптори се използват за описание на множества, редици и списъци. Позволяват описанието на даден обект в термините на множеството, към което принадлежи, а също и на дадено множество в термините на обектите, които съдържа то. Примери: (SetOf {(an Integer) (which hasFactor 2)}) (Items 2 4) поне числата 2 и 4 са елементи на множеството (AllItems 2 4 64 {(an Integer) (which hasFactor 3)}) (NotItems 5 1) числата 5 и 1 не са елементи на множеството (In {(SetOf (an Integer)) (Items 2 5 8) (NotItems 4)}) Последният пример представлява описание на обект от множество на цели числа, което включва поне 2, включва 4. 5 и 8 и не `````````````````````````````````````````` Състояние, случка (contingency) Формат: (during then ) Употреба: специфицира описание, зависимо от времето (или от някакъв хипотетичен свят). Пример. Част от описанието на даден конкретен блок от "света на кубовете" може да изглежда по следния начин: (during State24 then (the top from (a Stack with height=3))) ПРИМЕР [Person UNIT Basic ] [Traveller UNIT Specialization ] [Airport UNIT Basic ] [City UNIT Basic ] [PaloAlto UNIT Individual ] [SJO UNIT Individual ] [Magnitude UNIT Relation ] [IsGreaterThan PREDICATE Magnitude greater lesser] Дефинира предиката IsGreaterThan, като за фокус е избран слотът greater в Magnitude. Аргументът, който следва предиката, се отнася до слота lesser. Този предикат се използва в дескриптори от вида (which IsGreaterThan 2) като еквивалент на (the greater from Magnitude (a Magnitude with lesser=2)). [IsLessThan PREDICATE Magnitude lesser greater] Втори предикат, основан на релацията (unit-а) Magnitude, с фокус върху слота lesser. Пояснения: - знакът ";" служи за означаване на т. нар. характеристики (features), свързани със съответния слот. По-точно, знакът ";" предшества името на съответната характеристика. Една от тези характеристики, която се използва в нашия пример, е характеристиката DEFAULT. Тя служи за означаване на стойността, която се възприема по премълчаване за съответния слот (ако не е зададена някаква конкретна стойност). В дефиницията на unit-а Person стойността по премълчаване на слота homeTown е PaloAlto (PaloAlto е unit, описан като "a City"); - специалният unit ThisOne се интерпретира като цитиране на обекта, който текущо се описва, когато описанието се използва като прототип; - дескрипторът (which IsLessThan 2) използва предиката IsLessThan, който сравнява двойки числа и се основава на unit-а Magnitude. Предикатите се дефинират по отношение на (в съответствие с) даден unit, като аргументите на предиката са слотове на unit-а. Два различни предиката са дефинирани в нашия пример в термините на релацията Magnitude. Unit-ът Magnitude съдържа в SELF слота си специална процедура за проверка на верността на отношението (релацията). Предикатите винаги се използват, като се описва един специфичен аргумент, докато твърденията включват различен брой аргументи (по няколко аргумента), без да се фокусира върху един от тях.