margin: 0 auto - отличный ответ, но вы также можете использовать для этого переводчик;
/* start set fonts */
* {
font-family: 'Montserrat', sans-serif;
margin: 0;
padding: 0;
}
/* start general page */
html body {
background-color: #181333;
}
/* start container */
.container {
width: 100%;
background-color: #1e1939;
position: absolute;
top: 50%;
}
/* start title */
.title {
display: block;
margin: 5px;
padding: 5px;
color: #fefefe;
text-align: center;
letter-spacing: 15px;
}
/* start main line */
.main_line {
display: block;
width: 5%;
position: absolute;
left: 50%;
transform: translateX(-50%);
}
<div class="container">
<h1 class="title">OUR TEAM</h1>
<hr class="main_line">
</div>
Учитесь читать язык Common LISP HyperSpec.
Строки являются Последовательностями, Массивами (одномерные векторы символов) и, ну, в общем, Строки. Это означает, что большинство тех функций применимо.
Давайте посмотрим на, УДАЛЯЮТ. CLHS дает эту подпись:
remove item sequence &key from-end test test-not start end count key
=> result-sequence
Строки являются последовательностями символов. Таким образом, вызов для удаления был бы:
(remove #\/ "/foo/")
или (например)
(remove #\/ "/foo/" :start 2)
Помните: #\\символа. #\\узел не является никаким символом. Недопустимый. Строка является "/нечто /".
Объект для УДАЛЕНИЯ из строки должен быть символом. Ничто иное. Почему? Поскольку ТЕСТОМ является по умолчанию EQL, и EQL сравнивает символ в строке с Вашим аргументом объекта. Также ключ ИДЕНТИФИКАЦИОННЫМИ ДАННЫМИ по умолчанию и не изменяет объекты.
Что, если Вашим аргументом является строка? Ну, затем необходимо сделать больше:
(remove "/" "/abc/" :key #'string :test #'equal)
Это смотрит на каждый символ последовательности и превращает его в строку. Строка затем будет по сравнению с Вашим объектом "/" использование РАВНОЙ функции. Это работает также. Стоимость - то, что это должно генерировать строку от каждого символа "/abc /", каждая строка является новым объектом.
Другой способ сделать это:
(remove "/" "/abc/" :test (lambda (a b) (eql (aref a 0) b)))
Выше получает первый символ "/" в каждом тесте и сравнивает его с символом от строки "/abc /". Снова стоимость - то, что это должно получить символ пять раз (в этом примере).
Так лучший способ записать это, если Ваш исходный объект стал строкой:
(remove (aref "/" 0) "/abc/")
Выше мы получаем символ от строки "/" однажды и затем УДАЛЯЕМ, сравнивает этот символ с тестом EQL по умолчанию с каждым символом в строке - это возвращает новую строку тех символов, которые не являются EQL к #/.
Что Вы ожидаете? \foo, чтобы быть? В языке Common LISP это - символ |? НЕЧТО |.
Также (удаляют "нечто" "afoob") не работает, так как строка ("нечто" здесь) не является элементом строки. Помните, символы являются элементами строк. Помните также, что строки с одним объектом как "/" являются все еще строками и не символом. Таким образом "/" и #/имеют другой тип. Первой является строка, и вторым является символ.
SUBSEQ извлекает последовательность из последовательности. Это означает, что также извлекает строку из другой строки:
(subseq "0123456" 1 5)
where 1 is the start and 5 is the end index.
КОНКАТЕНИРУЙТЕ добавляет последовательности. Это означает, что также добавляет строки.
(concatenate 'string "abc" "123")
returns a new string with the strings "abc" and "123" appended.
Для удаления частей строки, см. также СТРОКОВУЮ ОБРЕЗКУ функций, СТРОКОВУЮ ЛЕВУЮ ОБРЕЗКУ и СТРОКОВУЮ ПРАВИЛЬНУЮ ОБРЕЗКУ.
Так, как в еще одном ответе для удаления подстрок из строки необходимо написать некоторый код, чтобы извлечь некоторые строки и затем связать их.
ИЩИТЕ ищет строки в строках.
Объяснение:
(remove "node" request-uri)
(remove 'node request-uri)
(remove ?\node request-uri)
(remove #\node request-uri)
(remove '("node") request-uri)
Это (соответственно): строка, (заключенный в кавычки) символ, (оцененный) символ, уродливый символьный литерал и список, содержащий одну строку. УДАЛИТЕ удаляет объект из последовательности объекта, и строка не является последовательностью ни одной из этих вещей.
Если Вы просто хотите удалить часть строки, SUBSEQ мог бы добиться цели:
(let ((uri "/node/143"))
(when (string= (subseq uri 0 6) "/node/")
(format t "user wants node ~D" (parse-integer (subseq uri 6)))))
Для более сложных вещей Вы, вероятно, хотите библиотеку как статья-ppcre и/или последовательность разделения. (При использовании Hunchentoot Вы уже имеете, первый загрузился.)
Для удаления целой подстроки необходимо будет сделать новую функцию, например:
(defun remove-string (rem-string full-string &key from-end (test #'eql) test-not (start1 0) end1 (start2 0) end2 key) "returns full-string with rem-string removed" (let ((subst-point (search rem-string full-string :from-end from-end :test test :test-not test-not :start1 start1 :end1 end1 :start2 start2 :end2 end2 :key key))) (if subst-point (concatenate 'string (subseq full-string 0 subst-point) (subseq full-string (+ subst-point (length rem-string)))) full-string)))
Это - просто начальная точка. Я копировал все опции для ПОИСКА, но я думаю, что некоторые опции не имеют смысла в этом контексте. По крайней мере, это работает:
(remove-string "node" "this is a node or not")
Для более тщательно продуманных случаев необходимо, возможно, смотреть на статью-ppcre, regex библиотеку.
Это перестало работать, потому что "/" строка, не символ.
(remove "/" request-uri)
"/node/143"
Если Вы хотите символ, необходимо использовать #/т.е. символ наклонной черты вправо.
(remove #\/ request-uri)
"node143"
Но как Вы видите, это удалит все наклонные черты вправо. Согласно странице документа Вы связались, удалите, берет названный параметрический усилитель ключевого слова: количество, которое говорит сколько объектов для удаления. Таким образом, Вы могли сделать это.
(remove #\/ request-uri :count 1)
"node/143"
Надеюсь, это поможет.
::Править::
Это не?/, это #/. Спасибо Douglas!