2013-01-04 3 views
1

가능한 중복 : 나는 현재 (커먼 리스프를 사용하여) 리스프와 함께 몇 가지 과정을 수행하고 어느 곳에서도 나는 '이 문제를 설정해야 해요
LISP - Global variable keep their old value after reinitialization임시 편집 전역 변수

나는 가지고있다.

그것은 설명하기가 까다로운하지만 여기에 표시됩니다 ..

상황 : 나는 두 개의 전역 변수, 다항식 있습니다 P1 & (P2)를 가지고있다. 내 임무는 지금까지 잘 진행되고있는 다항식 계산기를 만드는 것입니다.

3x^2 == ((x2) 3)으로 다항식 요소를 유지하고 다항식 요소 목록을 반복적으로 통과하는 두 개의 함수를 만들었습니다.

3x^2와 2x^2를 합치려면 5x^2 (또는 "((x2) (3 + 2))")가됩니다.

나는 세 번째 목록을 가지고 있는데, 그 결과는 계산 될 때마다 추가됩니다.

문제점 : 두 요소를 함께 추가 할 수 있으므로 결과에 추가 할 임시 변수를 만듭니다. 그러나 전역 변수는 내가하는 일에도 불구하고 변경됩니다.

내가하자 등 람다, 다양한 기능, 나는 이제 며칠 붙어 봤는데 크게 도움 감사하겠습니다 시도했습니다 당신이 내게 줄 수 :)

여기의 작은 예입니다 나는 무엇을 의미하는지 :

(setf p1 '((x 2) 2)) 
    ;2x^2 

(setf p2 '((x 2) 3)) 
    ;3x^2 

(if (equal (first p1) (first p2)) 
    (progn 
     (setf temp p1) 
     (setf (second temp) (+ (second p1) (second p2))) 
     (append-to-result temp) 
     (print p1) 
     (print temp))) 

출력 :

((× 2) 5)

,

((× 2) 5)

답변

2

당신이 할 경우 : 당신이 p1가 참조하는리스트 구조의 사본을 not_making하는

(setf temp p1) 

. 두 변수 모두 이제 동일한 조건 셀을 참조합니다. 그런 다음 수행 할 때 :

(setf (second temp) ...) 

두 변수가 여전히 참조하는 구조를 수정하면됩니다. 변경 :

(setf temp (copy-tree p1)) 
+0

빠른 답장을 보내 주셔서 감사합니다. –