mavka-ukr / mavka

Сучасна українська мова програмування
https://мавка.укр
Other
53 stars 4 forks source link

Pattern Matching #14

Open DanikVitek opened 1 year ago

DanikVitek commented 1 year ago

Проблема

Варто мати таку зручну конструкцію, як pattern matching. Бо при його використанні можна швидко отримати потрібні поля структури як окремі змінні та відсіяти непотрібні. Пропоную наступний синтаксис:

структура Людина
  ім'я текст
  вік число
кінець

дія отримати_студента(ім'я текст) Людина
  Людина(ім'я="Тарас", вік=21)
кінець

Людина(вік, ...) = отримати_студента("Тарас")
друк(вік)

Також зручною буде конструкція match. Варто подумати над перекладом ключового слова.

л = Людина(ім'я="Тарас", вік=21)

порівняти л
  Людина(ім'я, вік=13) тоді друк("неповнолітній %(ім'я)"),
  Людина(вік, ім'я) якщо вік не менше 18 тоді друк("Повнолітній %(ім'я)"),
  хтось_ще тоді друк("Інший варіант"),
  _ тоді впасти "недосяжне"
кінець
kohutd commented 1 year ago

Хороша ідея. Над синтаксисом треба ще добре попрацювати. А для ключового слова як варіант можна спробувати "перевірити".

До речі, вже є можливість деструкції обʼєктів, списків і словників:

(вік) = отримати_студента("Тарас")
[а, б] = [1, 2, 3]
(баг) = (баг="вада", лайк="вподобайка")

Правда поки лише в парсері, на днях буде втілено у мові.

UPD: "перевірити" непогано, але треба щось таке, щоб читалось нормально. Типу "перевірити чи" і тд, але одним словом. Впринципі, як варіант "коли".

kohutd commented 1 year ago
щось = ...

коли щось
  є Людина(імʼя, вік=13)
     друк("людина", імʼя, вік)
  кінець
  є Гриб()
    друк("гриб")
  кінець
  є інше
    впасти "допускаються лише люди і гриби!"
  кінець
кінець
kohutd commented 1 year ago

Скорочено:

коли щось
  є Людина(імʼя, вік=13): друк("людина", імʼя, вік)
  є Людина(імʼя, вік) та вік не менше 18: друк("доросла людина", імʼя, вік)
  є Гриб(): друк("гриб")
  є інше: впасти "допускаються лише люди і гриби!"
кінець
kohutd commented 1 year ago

Загалом, це виглядає дійсно круто, але треба більш детально описати що і як воно може "матчити". Тобто синтаксис паттернів і поведінку в різних ситуаціях. Бо, здається, це досить комплексна штука.