2016-08-18 1 views
0

:리스프 - 나는 LISP GCL이 그런 짓을하고 싶은 SETQ 및 자동차

(setq (car '(a 1)) (cdr '(a 1))) 

이 결과 얻을 :

(setq a 1) 

이를, 아니면이 가능 뭔가? 감사합니다, Declan

+0

'a'는 변수의 이름 (어휘 특수)이 이미 정의 되었습니까? 아니면 정의되지 않았습니까? – Renzo

+0

왜이 작업을 수행 하시겠습니까? 왜 해시 테이블을 사용하지 않을까요? – uselpa

+0

다른 모든 문제 외에도'cdr'가 아니라'cadr '를 원합니다. –

답변

0

예, 가능합니다. Common Lisp는 전체 생태계를 가지고 있으며 프로그램 실행 중에 모든 것을 컴파일하고 수행 할 수 있습니다.

(setq test value)은 원래 (set 'test value)으로 바뀐 매크로였습니다. set은 그 후 폐기 대상이되었지만 제거 될 것으로 의심됩니다.

(set 'test 'a) 
(set test 10) 
a ; ==> 10 

이제 setq은 당신이 당신이 원하는 변수를라는 시간의 99,99 % 이후 작은 따옴표를 잊지 않도록하게하고 따옴표 누락을 찾기 위해 반 하루 디버깅 할 필요가 없습니다 .

+1

그러나'set'은 특수 변수에서만 작동합니다. 예를 들어, (환경 변수를 선언하지 않고)'let ((x 1)) (set 'x 2) x)'는''1'을 평가하지만''x '의''symbol-value''를''2' '로 설정합니다. – tfb