Скоро начну разбираться с категорией mental, но в описании ТОМ-а на вики не нашёл про него никаких подробностей.
Категории объектов
Сообщений 1 страница 6 из 6
Поделиться12010-08-12 09:35:44
Поделиться22010-08-12 10:15:53
Напишу тут.
Объекты различных категорий отличаются друг от друга по 2м параметрам:
1. возможное количество объектов
2. поведение объектов при размещении/удалении внутри другого объекта
Количество объектов
unique - всегда 1
location - всегда 1
counting - любое целое число
class и mental - количество для этих категорий не имеет смысла
поведение объектов при размещении/удалении внутри другого объекта
unique - имитирует поведение уникального, неделимого физического тела.
Может быть размещен внутри location или другого unique
Может содержать внутри себя unique, counting, mental
При добавлении в объект автоматически удаляется из объекта, в котором хранился до этого.
При удалении из объекта автоматически попадает в global.
location - имитирует некоторое ограниченное пространство (например комнату).
Не может быть размещен внутри других объектов
Может содержать внутри себя unique, counting, mental
counting - имитирует поведение счетных, неразличимых между собой физических тел.
Может быть размещен внутри location, unique или другого counting
Может содержать внутри себя counting или mental
При добавлении в объект увеличивает внутри него количество себе-подобных объектов
Если извесно, где хранился до этого, вычитает это же количество из предыдущего места хранения.
При удалении из объекта вычитает из него указанное количество себе-подобных объектов.
mental - имитирует поведение нематериальных сущностей - мыслей, символов, объединений, концепций и т.п.
Может быть размещен внутри location, unique, counting или другого mental
Может содержать внутри себя unique, location, counting, mental
mental может быть добавлен в неограниченное количество объектов.
При добавлении в mental других объектов их первоначальное положение не изменяется.
location Дом {...} class мысль_о {...} mental мысль_о_доме { cls = мысль_о this + Дом } unique ГГ {...} ГГ + мысль_о_доме
class - используется для описания классов объектов
Может быть размещен внутри другого class
Может содержать внутри себя unique, location, counting, mental, class
Добавление объекта в class эквивалентно смене класса объекта.
Поделиться32010-08-12 17:41:39
ASBer, про action забыл, но там всё более-менее понятно... по началу, пока не встречаем:
действие сорвать
{ cls = взял // на основе действия "взял"
title = "сорвал%;; Мр; Мр=; Жр=а"
this.инфинитив="сорвать"
шаблон="сорвать=сорви @Что:Еда*Вп"
шаблон="сорвать=сорви @Что:Еда*РпМч"
шаблон="сорвать=сорви @Что:Еда*Вп с @Откуда:Куст*Рп"
шаблон="сорвать=сорви @Что:Еда*РпМч с @Откуда:Куст*Рп"
шаблон="сорвать=сорви" //шаблон для действия с умолчальным объектом
Что(Что) //дополнительная проверка предмета
{ if(!Что.pos.Куст)
return "{Что.lex} тут не растет."
else
return cls.Что(Что)
}
}
Очень удивила "дополнительная проверка". Уже который раз просматриваю исходники "мышек" и каждый раз нахожу там что-нибудь новенькое, такое, что вызывает удивление и заставляет очередной раз поднять планку оценки ТОМа. ТОМ - действительно хорошая платформа, просто мы (программисты) порой на столько привыкли мыслить в стандартном программерском круге ограничений, что трудно догадаться о всём скрытом потенциале платформы. Трудно представить, во что она превратится, если будет развиваться дальше. Цены ей не будет.
Поделиться42010-08-12 19:30:39
Угу, спасибо
Только практика показала что навешивание на парсер всяческих дополнительных проверок - это не тот подход, который требуется...
С помощью таких проверок невозможно добиться хотя-бы 75% попадания ответов парсера в тему. Чаще отвечает невпопад
Тут требуется другая идея
Поделиться52010-08-12 20:09:31
Тут требуется другая идея
Немного улучшить ситуацию можно модифицировав формат шаблонов, чтобы не описывать одну фразу с различными перестановками слов. Например,
шаблон="стрелять из @Weapon:Рогатка*Рп в @Цель*Вп"
шаблон="стрелять в @Цель*Вп из @Weapon:Рогатка*Рп"
шаблон="стрелять в @Цель*Вп"
шаблон="стрелять из @Weapon:Рогатка*Рп по @Цель*Дп"
шаблон="стрелять по @Цель*Дп из @Weapon:Рогатка*Рп"
шаблон="стрелять по @Цель*Дп"
шаблон="стрелять @Гр:Горох*Тп из @Weapon:Рогатка*Рп в @Цель*Вп"
шаблон="стрелять @Гр:Горох*Тп из @Weapon:Рогатка*Рп по @Цель*Дп"
шаблон="стрелять @Гр:Горох*Тп в @Цель*Вп из @Weapon:Рогатка*Рп"
шаблон="стрелять @Гр:Горох*Тп по @Цель*Дп из @Weapon:Рогатка*Рп"
//------------------------------------------------
"убить"="убей"="застрелить"="застрели"="атаковать"="атаковать" //с предлогом из
шаблон="убить @Цель*Вп"
шаблон="убить @Цель*Вп из @Weapon:Рогатка*Рп"
//------------------------------------------------
"напасть"="напади" //с предлогом на
шаблон="напасть на @Цель*Вп"
можно сильно сократить не перебирая все варианты перестановки слов, а закодировать примерно так:
шаблон="стрелять (@Гр:Горох*Тп)[?~] (из @Weapon:Рогатка*Рп)[?~] (в @Цель*Вп|по @Цель*Дп)[?~]"
//------------------------------------------------
"убить"="убей"="застрелить"="застрели"="атаковать"="атаковать" //с предлогом из
шаблон="убить (@Цель*Вп)[?~] (из @Weapon:Рогатка*Рп)[?~]"
//------------------------------------------------
"напасть"="напади" //с предлогом на
шаблон="напасть на @Цель*Вп"
где я для наглядности выделил элементы в круглые скобки. В квадратных скобках указаны доп. параметры для элемента: "?" указывает на то, что этот элемент может присутствовать, а может и отсутствовать в предложении; "~" - на то, что положение элемента в предложении не имеет значения. "|" разделяет различные варианты-синонимы: (в @Цель*Вп|по @Цель*Дп) - означает, что фразы "в филина" и "по филину" равнозначны и в предложении может быть одна любая из них.
Вот примерно так я вижу небольшое улучшение ТОМа по части шаблонов. Если полностью следовать правилам шаблонов, то парсер одним первым шаблоном будет разбирать фразы на-подобии этой: "из рогатки по филину стрелять горохом". Звучит немного коряво, но абсолютно правильно.
Но это не панацея, и в некоторых случаях такой формат шаблонов не сильно помогает делу. Вот пример:
шаблон = "заглянуть=посмотреть в @Obj:Контейнер*ВпЕч"
шаблон = "заглянуть=посмотреть внутрь=вовнутрь @Obj:Контейнер*РпЕч"
шаблон = "заглянуть=посмотреть во внутрь @Obj:Контейнер*РпЕч"
шаблон = "посмотреть что в @Obj:Контейнер*ПпМ2Еч"
шаблон = "что в @Obj:Контейнер*ПпМ2Еч ?"
шаблон = "что в @Obj:Контейнер*ПпМ2Еч"
шаблон = "посмотреть что внутри @Obj:Контейнер*РпЕч"
шаблон = "что внутри @Obj:Контейнер*РпЕч ?"
шаблон = "что внутри @Obj:Контейнер*РпЕч"
Попробуй-ка сократи!
Поделиться62010-08-16 12:45:41
можно сильно сократить не перебирая все варианты перестановки слов, а закодировать примерно так:
Вполне рабочий вариант, может быть воспользуюсь.
Только отсутствие элемента я бы обозначил как один из вариантов: (...|null)
А '~' вообще лишнее - если переменная в скобках, значит ее положение изменчиво.