Грамматика ложбана/18.6

From Lojban
Jump to navigation Jump to search

Оглавление

Подготовленные операторы (польская нотация, функции)

В этом разделе обсуждаются следующие cmavo:
cmavo selma'o значение
boi BOI терминатор числовой/lerfu строки
va'a VUhU инверсия знака
pe'o PEhO флаг продуманной мысли (префиксной формы)
ku'e KUhE терминатор продуманной мысли (префиксной формы)
ma'o MAhO преобразование операнда в оператор
py. BY буква «p»
xy. BY буква «x»
zy. BY буква «z»
fy. BY буква «f»

Инфиксная форма, описанная до сих пор, подходит для многих целей, но она ограничена и негибка. Она работает хорошо только там, где все операторы имеют ровно два операнда, и где старшинство можно либо предположить из контекста, либо ограничиться двумя уровнями, с некоторой помощью круглых скобок.

Однако существует множество операторов, которые не имеют двух операндов или имеют переменное число операндов. Предпочтительной формой выражения в таких случаях является использование «операторов продуманной мысли», также известных как польская (префиксная) нотация. При таком стиле записи математики оператор стоит на первом месте, а операнды – на втором:

18.32)  li su'i paboi reboi ci[boi] du li xa
        Число сумма один два три равно число шесть
        сумма(1,2,3) = 6

Обратите внимание, что после pa и re требуется обычно опускаемый терминатор числа boi, поскольку в противном случае чтение было бы pareci = 123. После ci он не требуется, но для симметрии он вставлен здесь в скобки. Единственный случай, когда boi требуется, как в примере 18.32, это когда есть два последовательных числа или строки lerfu.

В префиксной mekso может использоваться любое количество операндов, в примере 18.32 – три. Как узнать количество операндов в двусмысленных обстоятельствах? Обычное для Лойбана решение: опускаемый терминатор, а именно ku'e. Вот пример:

18.33)  li py. su'i va'a ny. ku'e su'i zy du li xy.
        Число «p» плюс отрицание( «n» ) плюс «z» равно число «x»
        p + -n + z = x

где мы знаем, что va'a – префиксный оператор, поскольку перед ним нет операнда.

va'a – оператор числового отрицания из selma'o VUhU. В отличие от него, vu'u не используется для отрицания чисел, а только для вычитания, поскольку у него всегда два или более операндов. Не путайте va'a и vu'u, которые являются операторами, с ni'u, которая является частью числа.

В примере 18.33 оператор va'a и терминатор ku'e фактически служат скобками. (Обычные скобки vei и ve'o для этой цели НЕ используются). Если опустить ku'e, то su'i zy будет поглощено префиксным оператором va'a, который будет иметь два операнда, ny. и su'i zy. где последний также является префиксным выражением.

Префиксное mekso также полезен для соответствия стандартной записи функций. Как представить "z = f(x)"? Ответ таков:

16.34)  li zy du li ma'o fy.boi xy.
        Число z равно числу оператор f x
        z = f(x)

Опять же, скобки не используются. Конструкция ma'o fy.boi является эквивалентом оператора и встречается здесь в префиксной форме (хотя ее можно использовать и как обычный инфиксный оператор). В математике буквы иногда означают функции, а иногда – переменные, и только контекст позволяет определить, что именно. Ложбан предпочитает принимать интерпретацию переменных по умолчанию и использует специальный флаг ma'o, чтобы обозначить строку lerfu как оператор. cmavo xy. и zy. являются переменными, но fy. – это оператор (функция), потому что ma'o отмечает его как таковой. boi требуется, потому что иначе xy. будет выглядеть как часть имени оператора. (Использование ma'o можно распространить со строк lerfu на любой операнд mekso: см. раздел 18.21.)

При использовании польской записи mekso перед оператором можно поставить необязательный маркер pe'o. Такое использование может помочь избежать путаницы, если предоставить четко обозначенные пары pe'o и ku'e для разграничения списка операндов. Примеры 18.32-18.34, соответственно, с явными pe'o и ku'e:

18.35)  li pe'o su'i paboi reboi ciboi ku'e du li xa

18.36)  li py. su'i pe'o va'a ny. ku'e su'i zy du li xy.

18.37)  li zy du li pe'o ma'o fy.boi xy. ku'e

Примечание: при использовании польской нотации mekso убедитесь, что операнды действительно являются операндами: они не могут содержать регулярных инфиксных выражений, если не заключены в скобки с vei и ve'o. Ранняя версия сложного примера 18.119 не удалась, потому что я (автор) забыл это правило.

Далее