refal-5-lambda icon indicating copy to clipboard operation
refal-5-lambda copied to clipboard

Удлинение e-переменных справа-налево

Open Mazdaywik opened this issue 6 years ago • 0 comments

Мотивация

Открытые e-переменные вообще используются нечасто (преимущественно, для поиска в ассоциативном списке), а сопоставление справа-налево требуется тем более реже. В кодовой базе есть всего один пример такой потребности:

https://github.com/bmstu-iu9/refal-5-lambda/blob/34e4d89e813365596bfa879fcafd6a16743b868c/src/compiler/GlobalGen.ref#L55-L60

Но зачем тогда эта задача? Во-первых, наличие сопоставления справа-налево добавляет в Рефал симметрии, т.е. красиво. Во-вторых, добавление требует минимальных правок кодогенерации. Недостаток: потребуется везде в промежуточном представлении протягивать для образцов направление сопоставления.

Синтаксис

В начало каждого образца может быть добавлен признак направления $L или $R. По умолчанию подразумевается $L, поэтому его ставить не нужно. Ключевое слово добавлено только для симметрии.

$ENTRY Go {
  = 'abracadabra' : $R e.1 'br' e.2 = <Prout e.1> <Prout e.2>
}

Вывод:

abracada
a

Mazdaywik avatar Sep 17 '18 08:09 Mazdaywik