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

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

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

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

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

спасибо!

1 ответов


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

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

общий эффект, чтобы сделать его, как если бы код был написан так:

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