refal-5-lambda
refal-5-lambda copied to clipboard
Удлинение e-переменных справа-налево
Мотивация
Открытые 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