다음 기능 (일치 재 정의)이 작동하지 않는 이유는 무엇입니까?함수가 라켓에 값을 할당하지 않음
(define vlist (list 10 20 30))
(match-define (list aa bb cc) (list 1 2 3))
(define alist (list aa bb cc))
alist
vlist
(define (match-redefine dst_list src_list)
(for ((d dst_list)(s src_list)) (set! d s)) )
(rnmatch-redefine alist vlist)
alist
vlist
출력은 :
'(1 2 3)
'(10 20 30)
'(1 2 3)
'(10 20 30)
대상 목록 (alist)이 변함. 이 기능을 작동시킬 수 있습니까?
편집 : 답변에 @OscarLopez에 의해 제안 나는 벡터를 시도했지만 작동하지 않습니다 :
(match-define (list a b c) (list 0 0 0) )
(define variable_vect (vector a b c))
a
b
c
(define valuelist (list 1 2 3))
(for ((i variable_vect)(j valuelist)) ; does not work
(set! i j))
variable_vect
a
b
c
(set! variable_vect valuelist)
(println "------- after ----------")
variable_vect
a
b
c
출력은 다음과 같습니다
0
0
0
'#(0 0 0)
0
0
0
"------- after ----------"
'(1 2 3)
0
0
0
편집 : 그것은 내가 사용해야 할 것 같다 특별한 클래스는이 사항을 적용합니다 :
(define myob%
(class object%
(super-new)
(init-field val)
(define/public (getval) val)
(define/public (setval v) (set! val v)) ))
(define (copyvalues objlist valuelist)
(for ((a alist)(v valuelist)) (send a setval v)) )
(define (show_objlist alist)
(for ((a alist)) (println (send a getval))) )
; USED AS FOLLOWS:
(define ob1 (make-object myob% 5))
(define ob2 (make-object myob% 5))
(define ob3 (make-object myob% 5))
(define alist (list ob1 ob2 ob3))
(println "---------- first assignment -----------")
(define vlist (list 1 2 3))
(copyvalues alist vlist)
(show_objlist alist)
(println "---------- second assignment -----------")
(define ylist (list 10 20 30))
(copyvalues alist ylist)
(show_objlist alist)
(println "---------- individual access -----------")
(send ob1 getval)
(send ob3 getval)
출력은 다음과 같습니다
"---------- first assignment -----------"
1
2
3
"---------- second assignment -----------"
10
20
30
"---------- individual access -----------"
10
30
당신은 로컬 변수'd' 만 수정하고 있으며, 라켓의 쌍은 어쨌든 없어지지 않습니다. – molbdnilo
변경할 수있는 특수 키워드 또는 기능은 무엇입니까? – rnso
언어를 언제든지 스키마 중 하나로 변경하거나 [변경 가능한 쌍] (http://docs.racket-lang.org/reference/mpairs.html)으로 작업 할 수 있습니다. 그러나 돌연변이 자체는 Schemey가 아니고 Rackety가 아니며 돌연변이 매개 변수가 더 그렇습니다. – molbdnilo