Kframework (https://kframework.org/), система для прототипирования и
изучения  семантик виртуальных машин и языков программирования, имеет
схожие черты с Рефалом. Мне кажется интересным применить Рефал в этой
области.

Хотя в лингвистике сейчас все захватили нейросети, мне кажется что для
работы с текстами у классических методов есть шансы, скажем опередить
нейросети по энергопотреблению  и возможности анализа. Здесь интересно было
бы генрировать программы анализа естественного языка и перевода с него на
язык формальной логики с помощью машинного обучения (генетических
алгоритмов, чего-то типа индуктивного логического программирования).

On Tue, Nov 5, 2024 at 4:21 PM Александр Коновалов
a.v.konovalov87_AT_mail.ru <[email protected]> wrote:

> Добрый день!
>
> Предлагаю порассуждать на тему применимости Рефала сегодня: какие у него
> могут быть преимущества перед другими языками и как ими можно
> воспользоваться.
>
> Я могу выделить следующие черты Рефала:
>
>    - динамически типизированный с закрытым набором типов — есть
>    ограниченный набор встроенных типов данных, пользовательские типы
>    конструируются на уровне соглашений (исключение: пара моих реализаций, где
>    есть инкапуслирующие квадратные скобки — небесспорное расширение) —
>    примерно та же ситуация, что и в классической Scheme;
>    - мощное сопоставление с образцом — сопоставлением с образцом сейчас
>    уже никого не удивишь, оно есть даже в Питоне (начиная с версии 3.10 или
>    3.11, и тоже довольно выразительное), но есть две достаточно редкие черты:
>    - повторные переменные, и соответственно, встроенное в язык понятие
>       равенства (однако, есть в Racket и есть в Scala),
>       - поиск в середине последовательности по образцу «e.X PAT e.Y»,
>       аналогичная возможность есть только в Tom <https://tom.loria.fr/> 
> (предназначен
>       для работы с XML и вообще удивительно похож на Рефал);
>       - встроенная в семантику конкатенация — в результатных выражениях
>    она записывается пустым местом, в других языках синтаксис конкатенации
>    более многословный,
>    - симметричный доступ к обоим концам последовательности в образцах —
>    в большинстве функциональных языков встроенными (основными)
>    последовательностями являются однонаправленные списки и образцы допускают
>    обращение только слева, исключения — Scala, где есть «:+» и «+:», 
> сопоставление
>    с эллипсисом в макросах Scheme и образцах Racket, образцы в Python, но там
>    списки — массивы,
>    - возврат из функции нескольких значений столь же (не)естественнен,
>    как и передача нескольких аргументов.
>
>
> Подытоживая, Рефал — динамически типизированный функциональный язык
> с выразительным сопоставлением с образцом, позволяющий удобно
> преобразовывать иерархические данные, например, синтаксические деревья.
> И сами данные, и их сопоставление с образцом, и построение новых значений
> записываются без лишнего синтаксического шума, т.е. всевозможных запятых,
> значков «+», «++», «+:» и прочих. Благодаря динамической типизации, он
> годится для быстрого написания небольших программ, выполняющих символьные
> вычисления. Но с другой стороны, написание крупных программ,
> разрабатываемых коллективами затрудняется: типы всё равно придётся
> определять и документировать, что для Рефала, как правило, делается
> комментариями с грамматикой для объектных выражений.
>
> Я пока нашёл только одну сферу, где Рефал неплох и абсолютно уместен —
> рабочий язык для небольшого курса, посвящённого генерации кода. Студенты
> пишут программы, принимающие на входе синтаксическое дерево, и порождающие
> код для модельного ассемблера. Пример синтаксического дерева:
>
> (function gcd (x y)
>   (var (rem 1))
>   (while ((L y) "<>" 0)
>     (rem "=" ((L x) "%" (L y)))
>     (x "=" (L y))
>     (y "=" (L rem))
>   )
>   (return (L x))
> )
>
> Синтаксическое дерево одновременно выглядит как код на ЯП и одновременно
> машиночитаемо — это просто запись объектного выражения Рефала-5. Синтаксис
> Рефала и основные приёмы программирования можно рассказать за две пары,
> а затем уже студенты могут писать компиляторы для подобных программ
> в рамках домашних работ. Более подходящего языка для этого курса я не вижу.
>
>
> *Других применений, где Рефал уместнее других языков программирования, я
> пока не встречал. А вы?*
>
> *Где ещё Рефал может быть уместнее других языков программирования?*
>
>
> С уважением,
> Александр Коновалов
>
  • Сф... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Arkady Klimov arkady . klimov_AT_gmail . com
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Mike Potanin mpotanin_AT_gmail . com
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
    • ... Александр Гусев gusev_aleksandr_AT_mail . ru
      • ... Александр Коновалов a . v . konovalov87_AT_mail . ru

Ответить