내가 이렇게 상상? bla
이 바뀌나요? 그것이 귀하의 setmachine
이 어떻게 작동한다고 가정합니다.
(set! variable newvalue)
이것은 variable
라는 이름의 변수가 아닌 foo
라는 이름의 변수를 변경합니다. 설정 기계가 작동하지만 원하는대로 작동하지 않습니다!
(define (setmachine variable newvalue)
(display variable) ; displays the value to variable
(set! variable newvalue) ; changes the binding to the value of newvalue
(display variable)) ; displays the value of variable (same as newvalue)
(define foo 1)
(setmachine foo 2) ; displays 1, then 2
는
variable
있지만
foo
개의 mutate했다 참조하십시오. 실제로
foo
대신 1을 전달하면 값으로 인수를 전달하므로 여전히 작동합니다.
foo
을 변경하도록 지시하지 않았습니다. 이를 수행하는 방법은 다음과 같습니다.
(define-syntax syntaxset
(syntax-rules()
((_ name expression)
(set! name expression))))
(define foo 1)
(syntaxset foo 2)
foo ; ==> 2
더 이상 절차가 아닙니다. 실제로 무슨 일 프로그램을 실행하기 전에 당신이 있기 때문에 작동하지 않습니다 2
로 평가하는 코드에서 1
의 모든 accurences를 다시 정의 (syntaxset 1 2)
을하려고하면 라켓 지금 (set! foo 2)
에 (syntaxset foo 2)
의 코드를 수정 한 것입니다 (set! 1 2)
이되고 set!
은 첫 번째 인수가 기호식이 될 것으로 기대합니다.
대단히 감사합니다! 아주 잘 설명! 한 번만 define-syntax를 보았고 이제는 문서를 확실히 확인합니다. – Jalokoh