2014-01-02 5 views
10

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

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

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

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

Спасибо!

ответ

13

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

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

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

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

Спасибо Шон. Почему у программиста есть '# 2 ='? Я предполагаю, что в этом случае это лишнее. – lurker

+0

Мне кажется излишним. – Sean

Смежные вопросы