У каждого шаблона есть указатель на имя функции и порядок следования параметров (передаваемых существительных, которые указаны в падежах). Эти параметры определяются исходя из имён объектов парсером и передаются в качестве ссылок на объекты. А функция уже сама "решает", что ей делать с переданными объектами.
Неактивен
Тогда, как я понял, автору игры нужно будет для команды "Надень на голову тролля горшок со сметаной" (точнее для глагола "надень") задать несколько шаблонов для корректного распознавания фраз:
"Надень на голову тролля горшок со сметаной"
"Надень горшок со сметаной на голову тролля"
"Надень горшок со сметаной на тролля"
"Надень горшок на голову тролля"
"Надень горшок на тролля"
и т.д.
Во что тогда превратится сам процесс разработки игры?..
Неактивен
Примерно так. А куда денешься? Хотя, ты подал очень интересную идею этим примером. Если действительно конструкции вроде "голова тролля" и "горшок со сметаной" рассматривать как единой целое, то фраза вообще упрощается. Надо подумать... Просто шаблоны - это метод Inform, я взял его за основу.
Неактивен
Ой, прошу прощения. Ошибочка вышла. RTADS не понимал "прилагательные" идущие после определяемого слова. Для этого необходимо наличие связующего предлога "of". Например, "sheet of paper", что по-русски "лист бумаги". Таким образом, как и в случае творительного и дательного падежа, родительный падеж эквивалентен комбинации предлога и слова. Теперь это введено, а также я нашёл путь распозновать предложения типа:
"взять кольцо из золота", "подарить средство от блох, "кинуть разделочный нож для рыбы в ящик". Как и в предыдущих случаях, для поддержки этого автору необходимо ввести слова "золота","блох","рыбы" в список прилагательных и их копию с пометкой на конце ("золота#r","блох#r","рыбы#r"), что скоро можно будет сделать моим "генератором".
Теперь всё поддерживается, даже "бросить горшок со сметаной в голову тролля"
(надеть горшок со сметаной на голову тролля - реально, но муторно для реализации, так как придётся менять глагол "одеть", который пока не знает, как одевать других,
а отдельную часть тела - тем более).
Всё это теперь есть в новой версии библиотек RTADS.
Неактивен
>troll:create ("troll_head", "troll head")
>player:create ("pot", "pot with_smetana")
>parse "Надень на голову тролля горшок со сметаной"
Пре-парсинг:
with_smetana = со сметаной
wear = надень, надеть, одеть
on = на
head = голов*
troll = трол*
pot = горшок
wear on head troll pot with_smetana
verb = wear
prep1 = on
obj1 = head troll pot with_smetana
prep2 = with
obj2 = nil
head troll pot with_smetana не найден
head troll pot - не найден, with_smetana - найден pot with smetana
head troll найден, pot with_smetana - найден
Ok, let's see
verb = wear
prep1 = on
obj1 = head troll -> troll_head
obj2 = pot with_smetana -> pot
troll_head:wear {preps = {"on"}, obj = pot, names = "pot with_smetana"}
Неактивен
"Надень на голову тролля горшок со сметаной"
"Надень горшок со сметаной на голову тролля"
"Надень горшок со сметаной на тролля"
"Надень горшок на голову тролля"
"Надень горшок на тролля"
Всё это разбирает мой парсер. На выходе структура семантическая, по которой легко распознать компу что к чему происходит. Тут уже для движка, который генерирует действия идёт работа - если в действиях есть "голова" некоего объекта, то делаем действие "на голову", если нет то надеваем на сам объект. видимо горшок не налезет на самого тролля