добавление суффикса -ing к RGL на GF
В английском языке есть составные глаголы, добавление к ним прямых (ing) неверно, например добавление ing к
"turn on" -> RGL -> ParadigmsEng -> verbalN -> "turn onning"
очевидно, что то, что было сделано выше, неверно, поэтому я попытался ввести новую оперу в вербальный N, где, если глагол является частью двух слов, то первое следует вербальным правилам, а второе остается неизменным. Я написал следующий код, но он не сработал.
oper
compVerbalN : Str -> Str -> verbalN
= \x,y -> (verbalN (x.s) ++ y.s));
Я знаю, что, возможно, указанная выше операция не является правильной, но у меня все еще возникают проблемы с пониманием идеи того, как операции GF работают вместе.
Спасибо
1 ответ
Исправляем ваш код
Ваш код не работает по нескольким причинам:
- Тип возврата должен быть категорией, но
verbalN
это опер. Так должно быть какcompVerbalN : Str -> Str -> N
, или скорееcompVerbalN : V -> Str -> N
. - В теле функции вы неправильно используете аргументы.
- Вы пытаетесь получить доступ к
s
полеx
иy
, но согласно сигнатуре типа это строки, а не записи с именованным полем. - Вы пытаетесь дать
verbalN
строка в качестве аргумента, но на самом деле она ожидаетV
.
- Вы пытаетесь получить доступ к
Предположим, ради практики, что вы хотите иметь такую сигнатуру типа,
Str -> Str -> N
. Затем нужно сделать что-то вроде этого:
compVerbalN : Str -> Str -> N = \turning,on ->
let turning_N : N = mkN turning ;
in turning_N ** {
s = \\num,cas => turning_N.s ! num ! cas ++ on
} ;
Тестирование в оболочке GF:
> cc -table compVerbalN "turning" "on"
g . Neutr
s . Sg => Nom => turning on
s . Sg => Gen => turning's on
s . Pl => Nom => turnings on
s . Pl => Gen => turnings' on
Это дает правильный результат, но ковыряться во внутренних компонентах категорий GF рискованно. RGL API фиксирован, но детали реализации RGL всегда могут измениться, например, какие параметры имеют некоторые таблицы и как называются имена полей. Так что, если возможно что-то построить только с помощью RGL API, вы должны это сделать.
Как это сделать с помощью RGL
Чтобы построить глагол частицы, вам нужно использовать конструктор ParadigmsEng
partV
, который имеет следующую сигнатуру типа:
partV : V -> Str -> V -- with particle, e.g. switch + on
Если ваш глагол построен правильно, то
verbalN
должно получиться правильное существительное. Вот пример:
resource Test = open SyntaxEng, ParadigmsEng in {
oper
turn_on_V : V = partV (mkV "turn") "on" ;
turning_on_N : N = verbalN turn_on_V ;
}
Тестирование в оболочке GF (после
i -retain Test.gf
):
> cc -table turning_on_N
g . Neutr
s . Sg => Nom => turning on
s . Sg => Gen => turning's on
s . Pl => Nom => turnings on
s . Pl => Gen => turnings' on
Обновите свой RGL
Отвечая на этот вопрос, я заметил, что
verbalN
изначально не включала частицу, поэтому я добавил ее в коммит всего несколько минут назад. Итак, чтобы увидеть этот результат, вам нужно обновить свой RGL.
Если обновить RGL невозможно (например, вы работаете на школьном компьютере, на который не можете устанавливать какие-либо материалы), вам потребуется использовать такую конструкцию, как
compVerbalN
с начала этого ответа.