В моем случае я искал услуги. Затем нашел службу под названием «SQL Server (SQLEXPRESS)». Затем щелкните правой кнопкой мыши на этом. Выберите свойства. Затем нажмите «Пуск». Вот и все. Решил проблему.
Использование setq более низкоуровневое, но производительность setf не проблема. А setf позволяет вам (или разработчикам библиотеки) предоставлять настраиваемое поведение setf, например устанавливать части настраиваемых структур данных. Я говорю: используйте setf везде, если у вас нет причин не делать этого.
Также см. Практический Common Lisp, глава 3: «Макрос SETF является основным оператором присваивания Common Lisp». PCL доступен в Интернете бесплатно: http://gigamonkeys.com/book/
Вы можете использовать setf
везде, где можете использовать setq
. Фактически, setf
на самом деле является макросом, который основан на setq
. Так что это должно быть чисто проблемой читабельности и стиля.
Почти весь код, который я ' Мы видели, что он избегает использования setq
и использует setf
.
setf - это «поле установки», оно меняет место и может иметь добавочные номера пользователей. setq устанавливается с указанием первого аргумента в кавычки.
FWIW, I always use setf
. If I change the structure of my code slightly, I just need to change the "place" instead of the place and the operator (setq -> setf).
Also, don't worry about performance, setf is exactly the same as setq for symbols:
CL-USER> (macroexpand '(setf foo 42))
(SETQ FOO 42)
Я рекомендую вам последовать последнему совету Норвига в этом разделе: будьте последовательны. «Читаемость», конечно, самая важная причина сделать любой выбор в программировании. Если важно сообщить читателю (возможно, через 2 месяца), что вы имеете дело со всей ячейкой значения символа, используйте setq
; в противном случае используйте setf
. Но только если вы будете последовательны.
Вы не ошибетесь, если везде будете использовать setf вместо setq.
Именно такие вещи уводят Common Lisp от дальнейшего развития, множество неиспользуемых вещей, которые разработчикам по-прежнему необходимо поддерживать .