LINUX.ORG.RU

Самый лучший pattern matching где взять?

 , , ,


1

5

Вопрос по дизайну языка. В CL есть destructuring-bind, но он что-то слабоват. Либо ты попал в один шаблон, либо ошибка - никакого destructuring-case нет. Кроме того, квазицитаты, которые тут просятся, использовать нельзя. По сути задействован синтаксис из определения функции, т.е. можно обязательные, необязательные, параметры ключи и сопоставление головы и хвоста списка из консов.

Когда пытаешься использовать pattern matching, сразу становится ясно, что этого мало. Нужно:

1. Нужна возможность сопоставления с несколькими шаблонами, как в case.

2. В шаблоне не всё является параметром, иногда нужно, чтобы была возможность задать фиксированные ключевые слова, которые там должны быть, но нам не нужно их видеть среди переменных.

3. Нужно иногда проверять тип значения, к-рое мы сопоставляем.

4. Иногда нужно использовать разные предикаты для сопоставления. Т.е. если мы ищем шаблон со строкой «abc», то иногда нам нужно искать без учёта регистра.

5. Если в языке есть квазицитаты, должна быть возможность строить шаблон из них, где подстановочные места будут переменными.

Я попробовал пару библиотек pattern-matching для CL, но в итоге как-то стал без него обходиться (почему-то это не сильно меня опечалило).

Тем не менее, ищутся люди, интенсивно применяющие pattern matching, и от таких людей я хотел бы узнать: язык на котором они это делают, степень вашего удовлетворения технологией и ссылка на описание технологии.

★★★★★

Последнее исправление: den73 (всего исправлений: 2)

Ответ на: комментарий от grouzen

Не знаю, завезли или нет, в теории это возможно, если известен тип входа. Но тут вопрос в другом - насколько нужна эта проверка при написании кода на лиспе? По-моему в написании кода на лиспа у тебя всегда есть понимание что форма может вернуть какой-то дефолт кроме того что вернул ты, типа того как сделано в `if`, `cond` и тд, где можно указывать catch-all хендлер.

loz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.