2014-01-19 2 views
-1

여기 여기 내 코드라켓에서 결과를 지우는 방법?

#lang racket 
(define a '()) 
(define (add l) 
    (set! a (cons (car l) a))) 

인 문제는 내가 원하는 것입니다

> (add '(1)) 
> a 
'(1) 
> (add '(2)) 
> a 
'(2 1) 

결과

입니다 (추가 '(2))만을 쇼 (2) 대신 (2 일) 나는 이전 결과를 원하지 않는다.

> (add '(1)) 
> a 
'(1) 
> (add '(2)) 
> a 
'(2) 
> (add '(3)) 
'(3) 

누군가가 나를 도울 수 : 나는이 같은 결과를 원하는? 고마워!

답변

1

귀하의 코드 :

(define (add l) 
    (set! a (cons (car l) a))) 

분명히 l 원래 a에서 새로운 요소로 형성된 새로운 목록에 a의 바인딩을 변경합니다. 그것이 cons 부품의 기능입니다. 심지어 이름은 add입니다. 당신이 그것을 다시 원하는 위치에 그냥 다시 시작 a를 재설정하려면

(define (replace-a x) 
    (set! a x)) 

(replace-a '(1)) 
a ; ==> (1) 

(replace-a '(2)) 
a ; ==> (2) 

(replace-a '(3)) 
a ; ==> (3) 

, 당신은뿐만 아니라 set를 사용하고 넣어 : 당신이 좋아하는 다른 뭔가를 원하는 것 같다

(set! a '()) ; set a to the empty list (null) 
+0

미안, 무엇을 내 뜻은 내 (정의 '())는 결과를 저장하고, 다음에 실행하기 전에 결과를 지우고 싶습니다. (정의 (추가 l)) –

+0

당신이 어떻게하는지 말해 줄 수 있습니까? –

+0

@FrankYang 답변을 업데이트했습니다. 기본적으로'set! '도 사용합니다. 기억하세요, 전역을 변경하는 것은 Scheme과 같지 않지만 일어납니다. – Sylwester