Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
29.11.2010 00:36

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Проблема с массивом в качестве параметра

Сделал хак для распознавания глаголов с возвратным окончанием "-ся"

Код:

// замена "себя" на имя подходящего объекта
replaceSelf: function(str)
    {
        local name;
        local ret := reSearch('себя',str);
        
        // превращаем возвратные глаголы в глаголы прямые + "себя"
        // игнорируем те, у которых есть специальные значения с "ся" (осмотреться!=осмотреть себя)
        // пока срабатывает на однократное вхождение
        if (ret=nil)
    {
            local alph='абвгдеёжзийклмнопрстуфхчцшщъыьэюя';
            local verbs, dVerb;
            ret := reSearch('[абвгдеёжзийклмнопрстуфхчцшщъыьэюя]+ся[^абвгдеёжзийклмнопрстуфхчцшщъыьэюя]*',str);
            if (ret && ret!=[]) 
            {
                verbs:= parserDictLookup([[]+ret[3]], [PRSTYP_VERB]);
                if (verbs=[]) 
                {
                    dVerb:=replaceStr(ret[3], '(.+)ся', '$1');
                    verbs:= parserDictLookup([dVerb], [PRSTYP_VERB]);
                    if (verbs!=nil) 
                        str:=replaceStr(str, '([абвгдеёжзийклмнопрстуфхчцшщъыьэюя]+)ся[^абвгдеёжзийклмнопрстуфхчцшщъыьэюя]*','$1 себя');
                }
            }
        }
        
    if (ret!=nil)
     {
      // Узнаем имя персонажа и его лексемы без флагов
      local actor_sdesc:=dToS(parserGetObj(PO_ACTOR),&sdesc);
      local nouns:= getwords(parserGetObj(PO_ACTOR),&noun);
      local i, oldstr:=str;
      for (i:=1; i<=length(nouns);i++) 
            if (reSearch('[#/]',nouns[i])<>nil) {nouns-=nouns[i]; i--;}

      // Стараемся использовать имя персонажа для уточнения о ком речь,
      // но если таких лексем нет - берем первое его попавшееся существительное
          if (find(nouns, actor_sdesc)<>nil)  name:=actor_sdesc;  else name:=nouns[1];

            str:=replaceStr(str, 'себя',  name);
     }
    return str;
}
;

Вопрос:
почему verbs:= parserDictLookup([ret[3]], [PRSTYP_VERB]); возвращает пустой список для 'осмотреться'?

Отредактировано GrAndrey (29.11.2010 08:48)

Неактивен

0    0    #2
29.11.2010 03:33

Dark[Ol(U23)leneri]
Участник (-3)
Зарегистрирован: 16.05.2010
Сообщений: 203

Re: Проблема с массивом в качестве параметра

GrAndrey написал:

// превращаем озвратные глаголы в глаголы прямые + "себя"

Мне кажется тут баг=)

Неактивен

0    0    #3
29.11.2010 07:48

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Проблема с массивом в качестве параметра

GrAndrey написал:

Вопрос:
почему verbs:= parserDictLookup([ret[3]], [PRSTYP_VERB]); возвращает пустой список для 'осмотреться'?

Не знаю, действительно ли ГрАнд не знает или это проверочное задание;), но отвечу.

 спойлер…

Отредактировано uux (29.11.2010 09:10)

Неактивен

0    0    #4
29.11.2010 08:42

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Проблема с массивом в качестве параметра

Спасибо, Валя!

Я действительно не знал, и подумать не мог о таком нюансе, добавлю в FAQ.

Неактивен

0    0    #5
29.11.2010 08:46

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Проблема с массивом в качестве параметра

Dark[Ol(U23)leneri] написал:

GrAndrey написал:

// превращаем озвратные глаголы в глаголы прямые + "себя"

Мне кажется тут баг=)

ну, тут есть потенциал для багов. Например, при команде "покопаться в ..." система это поймет как "покопать себя в ...". Игрок будет несколько удивлен smile

Неактивен

0    0    #6
29.11.2010 09:10

uux
Участник (+884, -80)
Откуда: Москва
Зарегистрирован: 02.12.2006
Сообщений: 1624

Re: Проблема с массивом в качестве параметра

GrAndrey написал:

Спасибо, Валя!

Я действительно не знал, и подумать не мог о таком нюансе, добавлю в FAQ.

Ну, я о таком нюансе тоже не знал на самом деле, просто минут 15 поэкспериментировал с отладчиком;).

Неактивен

0    0    #7
29.11.2010 10:10

Dark[Ol(U23)leneri]
Участник (-3)
Зарегистрирован: 16.05.2010
Сообщений: 203

Re: Проблема с массивом в качестве параметра

GrAndrey написал:

Dark[Ol(U23)leneri] написал:

GrAndrey написал:

// превращаем озвратные глаголы в глаголы прямые + "себя"

Мне кажется тут баг=)

ну, тут есть потенциал для багов. Например, при команде "покопаться в ..." система это поймет как "покопать себя в ...". Игрок будет несколько удивлен smile

я говорил об "озвратных глаголах" ))

Неактивен

0    0    #8
29.11.2010 17:17

GrAndrey
папа RTADS и Бяка (+49, -2)
Откуда: Москва
Зарегистрирован: 15.09.2002
Сообщений: 1198
Вебсайт

меньше слов

Re: Проблема с массивом в качестве параметра

это же опейчатка! Но "развратные глаголы" навели на следующую безумную идею...

Неактивен

0    0    #9
29.11.2010 17:48

Dark[Ol(U23)leneri]
Участник (-3)
Зарегистрирован: 16.05.2010
Сообщений: 203

Re: Проблема с массивом в качестве параметра

То-то же^^

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru