В последнем посте я очень быстро объяснил, как работает сопоставление с образцом в Racket и как создавать новые образцы.

Тем не менее, есть небольшой шаблонный код, который меня беспокоит. Это «макровещь», которая напрямую не связана с созданием новых паттернов. Итак, я создаю макрос, чтобы удалить этот макрос из представления. Эээ… что-то мне подсказывает, что это не самый разумный подход, но… =/

Вот новый шаблон для сопоставления вещей, вложенных в списки:

Мой макрос прост (истический), просто дополнительная строка и некоторое обобщение:

И его можно использовать так:

Этот макрос является вложенным, т.е. это макрос, который генерирует другой макрос. Это не проблема для Racket (он легко с этим справляется), но для человеческого разума это немного странно.

Обратите внимание, что в обоих случаях «…» не интерпретируется сопоставлением с образцом, а расширяется макросом. Нам нужно использовать «(… …)», чтобы экранировать его, чтобы он не интерпретировался.

Я уверен, что этот макрос можно значительно улучшить, особенно экранирование многоточия! Но все равно было весело его создавать. Если бы кто-то с лучшим макро-фу, чем я, мог бы помочь мне улучшить его, я был бы очень признателен ^_^