Lisp: расширенное сравнение строк - программирование
Подтвердить что ты не робот

Lisp: расширенное сравнение строк

Недавно я столкнулся с этой строкой в ​​некотором общем коде библиотеки LISP:

(string-equal #1="http://" url :end2 (min (length url) #2=#.(length #1#)))

Здесь url передается как строковая переменная. Я понимаю, что цель этого сравнения состоит в том, чтобы определить, начинается ли строка url с http://, и это сравнение без учета регистра. Я также понимаю ключи string-equal, такие как :start и :end. Но знак фунта (#) пунктов бросил меня. Я могу понять большую часть этого контекста, но я не нашел документацию о том, как это работает, и я по-прежнему немного озадачен тем, что действительно означает #2=#.(length #1#). Это выглядит немного мистически для меня.

Может ли кто-нибудь объяснить, как работает механизм знака фунта в этом конкретном контексте и если он универсально используется в других конструкциях таким же образом? Или укажите мне документ/веб-сайт, который его описывает.

Спасибо!

4b9b3361

Ответ 1

Функция знака фунта (или резкого) описана в Hyperspec здесь.

Обозначение #1= обозначает следующую форму (здесь строка "http://") с числовым индексом для backreference в обозначении #1#. #. вызывает следующую форму оцененную во время чтения.

Общий эффект заключается в том, чтобы сделать так, как если бы код был написан как:

(string-equal "http://" url :end2 (min (length url) 7))