2017-02-03 2 views
2

Я пытаюсь назначить переменную a параметру (списку) в моей функции. Я продолжаю получать переменную L, не имеет значения, как я могу назначить переменную внутри функции параметром списка?Lisp Назначить переменную параметру

(defun pali(list) 
    (defvar a nil) 
    (defvar b nil) 
    (setq a (list)) 
    (setq b (reverse list)) 
    ) 
+0

Что вы хотите сказать? Кажется, это скомпилировано, когда я пытаюсь. Эта проблема может быть связана с тем, что вы даете ей – Sandles

+0

Вам нужно указать точную форму, которую вы оцениваете, и скопировать/вставить сообщение об ошибке. – sds

+0

in '(setq a (list))' вы сначала оцениваете 'list' (запускаете функцию' (list) '), а затем присваиваете возвращаемое значение' a'. это по дизайну? – rsm

ответ

1

Если я понять правильно, что вы хотите

(defun pali (list) 
    (let ((a list)) 
     ((b (reverse list))) 
    ...)) 

Это почти наверняка неправильно поставить DefVar внутри функции, и, вероятно, повредит вам плохо, если вы используете DefVar с именами типа A и B. DEFVAR создает глобальную переменную, и это делает символ, который называет его «особенным»; везде, где вы будете использовать его в будущем, вы получите значение символа вместо лексической переменной. Странные вещи произойдут, когда вы этого не ожидаете. Вот почему переменные DEFVAR обычно называются A и т. Д., А не просто A. Используйте LET для создания нормальной лексической переменной. И тогда вначале не так много настроек, чтобы установить NIL, а затем использовать SETQ, чтобы изменить его, хотя вы можете это сделать, если хотите. Даже просто

(let (a b) 
    (setq a list 
     b (reverse list)) 
    ...) 

, если это то, что вы хотите [Обратите внимание, что вы можете использовать один SETQ для установки многих переменных. Не обязательно, конечно,

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