В последнем посте я очень быстро объяснил, как работает сопоставление с образцом в Racket и как создавать новые образцы.
Тем не менее, есть небольшой шаблонный код, который меня беспокоит. Это «макровещь», которая напрямую не связана с созданием новых паттернов. Итак, я создаю макрос, чтобы удалить этот макрос из представления. Эээ… что-то мне подсказывает, что это не самый разумный подход, но… =/
Вот новый шаблон для сопоставления вещей, вложенных в списки:
Мой макрос прост (истический), просто дополнительная строка и некоторое обобщение:
И его можно использовать так:
Этот макрос является вложенным, т.е. это макрос, который генерирует другой макрос. Это не проблема для Racket (он легко с этим справляется), но для человеческого разума это немного странно.
Обратите внимание, что в обоих случаях «…» не интерпретируется сопоставлением с образцом, а расширяется макросом. Нам нужно использовать «(… …)», чтобы экранировать его, чтобы он не интерпретировался.
Я уверен, что этот макрос можно значительно улучшить, особенно экранирование многоточия! Но все равно было весело его создавать. Если бы кто-то с лучшим макро-фу, чем я, мог бы помочь мне улучшить его, я был бы очень признателен ^_^