문제

이름 On Lisp 은 진정으로 혼란-그것은 명확하지 않는 방법을 반환을 인용과 같은 목록 '(oh my) 실제로 바꾸는 방법 기능 동작에 :지 않을 반환되는 목록이 생성되서 다시 기능을 처음부터 다음에,그것은이라고?

우리가 정의하는 경우 외치는 반환 값 통합 quoted 목록

(defun exclaim (expression) 
  (append expression ’(oh my)))

그런 다음 이후 파괴의 수정이 반환 값

(exclaim ’(lions and tigers and bears)) 
->  (LIONS AND TIGERS AND BEARS OH MY)
(nconc * ’(goodness))
->  (LIONS AND TIGERS AND BEARS OH MY GOODNESS)

수 목록 변경 내에 기능:

(exclaim ’(fixnums and bignums and floats)) 
->  (FIXNUMS AND BIGNUMS AND FLOATS OH MY GOODNESS)

를 외치는 증거에 대하여 이러한 문제를,그것을 써야 한다:

(defun exclaim (expression)
  (append expression (list ’oh ’my)))

는 방법은 정확히 그 마지막 전화 exclaim 추가 말씀 goodness 결과?기능은 참조하지 않는 어떤 외부의 변수 그래서 어떻게 별도의 통화 nconc 실제로 바꾸는 방법 exclaim 기능 작동합니까?

도움이 되었습니까?

해결책

a)의 효과를 수정 리터럴 목록에서 정의되지 않은 공통적인 표준입니다.무엇이 당신을 여기에 참조로 예를 들어 하나의 가능한 동작입니다.

(1 2 3 4) 리터럴 목록입니다.그러나 전화 LIST 처럼에서 (list 1 2 3 4) 반 갓 consed 목록에 runtime.

b)목록에 문자 데이터에서의 코드를 이 함수입니다.모든 통화를 반환됩니다 정확히 이 데이터를 객체입니다.을 제공하려는 경우는 신선한 목록에서 각각 전화,당신은 다음과 같은 코드를 사용하면 목록 또는 복사 목록입니다.

c)이후 반환되는 목록이 항상 같은 리터럴 데이터를 객체,수정하는 그것이 영향을 미칠 수 있습니다으로 설명한다.나 상상할 수 있도 오류가 발생한 경우 코드와 해당 객체를 할당된 읽기 전용 메모리입니다.목록 수정한 다음 나오려고 읽기/쓰기만 메모리입니다.

d)하나 염두에 두어야 할 점은 작업을 할 때 문자 그대로 목록에서 데이터 소스 코드가 이:Lisp 컴파일러는 무료입을 최적화하지 않습니다.목록을 경우에 발생되는 여러 시간에는 소스코드와 컴파일러가 허용 및 감지만 하나를 만들 목록입니다.모든 다양한 장소는 다음이 하나의 목록입니다.따라서 목록 수정해야 효과는 이러한 변화에 표시 될 수 있다고 한다.

이 발생할 수 있습니다 다 리터럴 데이터와 같은 개체 배열/벡터입니다.

는 경우에 데이터의 구조는 부분의 코드를 반환이 내부 데이터 구조,수정 이 데이터 구조-다음을 시도할 수정 코드입니다.

참고 또한 패키지 실행할 수 있습니다.인터프리터 일반적으로 작품에서는 Lisp 소스 구조-코드되지 않은 컴퓨터 코드,그러나 해석 패키지 코드 패키지 데이터입니다.여기서 당신은 수 있는 소스 코드를 수정 at runtime,뿐만 아니라 데이터에 포함 된 소스 코드입니다.

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