'(ABC)와 ('a 'b'c)의 차이점은 무엇입니까?
-
07-07-2019 - |
문제
나는 "on lisp"를 읽고이 코드를 만났다 (나는 그것을 조금 단순화했다).
CL-USER> (defun foo ()
'(a b c))
FOO
CL-USER> (foo)
(A B C)
CL-USER> (nconc * '(D E))
(A B C D E)
CL-USER> (foo)
(A B C D E)
CL-USER> (defun foo ()
(list 'a 'b 'c))
STYLE-WARNING: redefining FOO in DEFUN
FOO
CL-USER> (foo)
(A B C)
CL-USER> (nconc * '(D E))
(A B C D E)
CL-USER> (foo)
(A B C)
정확히 무엇을 하는가
*
평균? 이전 기능 호출입니까? 실제 코드에서 사용하기에 적합합니까?왜
(nconc * '(D E))
첫 번째 반환 값을 변경하십시오foo
기능?나는 항상 생각했다
(list 'a 'b 'c)
그리고'(a b c)
동일합니까? 차이점은 무엇입니까?
해결책
목록에 대한 호출은 평가 될 때마다 새 목록을 만듭니다. 목록 문자는 컴파일 후 읽기 전용 메모리 세그먼트에 배치 될 수 있습니다. NCONC의 목록에 대한 파괴적인 업데이트는 문제가되지 않으며, 정의되지 않은 결과 (세분화 오류, 향후 참조를위한 문자를 변경하거나 전혀 아무것도 없음) 문제가 발생할 수 있습니다.
다른 팁
변수 *
, **
그리고 ***
언어로 지정됩니다 기준 그리고 테스트 할 때 매우 유용합니다. 그것들은 REPL의 특징이며, "실제 코드"에 유용하지는 않지만 그렇지 않습니다.
제휴하지 않습니다 StackOverflow