문제

나는 "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의 특징이며, "실제 코드"에 유용하지는 않지만 그렇지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top