2017-02-17 13 views
1

Например:Как добавить значение, сохраненное в переменной, в список?

(setf s 2) 
    s => 2 

(setf list1 '(1 s 3 4)) 
    list1 => (1 s 3 4) 

Как я могу получить его, чтобы добавить значение, хранящееся в секундах в списке? В этом примере я хотел бы использовать s для создания списка (1 2 3 4) У меня есть книга с книгами, которую я читаю, и я не могу найти никакого упоминания о том, как это сделать, поэтому я подумал, d ask.

+1

'(1, s 3 4) должен работать (обратите внимание на запятую перед с). –

+0

Я просто попробовал это, и я получаю следующую ошибку (запятая является незаконной за пределами backquote) –

+1

Да, вы должны использовать backquote ('), а не цитату ('). –

ответ

1

Так цитируемые данные в схеме похожи на строковые константы .. Если бы я написал "1 s 3 4" в Java, я бы не смог заменить s на содержимое переменной. Мне нужно написать "1 " + s + " 3 4". В Лиспе мы backquote сделать это в список структур:

`(1 ,s 3 4) 
; ==> (1 2 3 4) 

Обратите внимание, что это трюк .. Это как «1 $ S 3 4» в PHP, как это представляющий код, который создает список с некотируемым переменных оценивать и возвращать новую структуру списка. Под капотом это очень похоже на письма:

(list 1 s 3 4) 
; ==> (1 2 3 4) 

И конечно list не является примитивным, так как он просто использует cons. Что она делает это:

(cons 1 (cons s (cons 3 (cons 4 '())))) 
; ==> (1 2 3 4) 
+0

Спасибо за объяснение. Прекрасно работает! –

1

Я хотел бы использовать с, чтобы создать список (1 2 3 4)

Функция list может быть удобно:

CL-USER 14 > (let ((s '2)) 
       (list 1 s 3 4)) 
(1 2 3 4) 

Функция LIST создает новый список из своих аргументов.