set-car!
과 set-cdr!
이식 가능하게 매크로를 Scheme에서 set!
을 사용하여 매크로로 구현할 수 있습니까? 또는 기본 스토리지 시스템에 특별한 액세스가 필요합니까?자동차 세트 가능! 그리고 set-cdr! 매크로로 구현 되나요?
나는 내 자신의 Scheme 인터프리터를 구현하고 있기 때문에 묻고 있는데, 나는 가능한 한 많은 코드를 갖고 싶다. set-cdr!
에
내 첫 번째 시도했다 :
(define-syntax set-cdr!
(syntax-rules()
((set-cdr! location value)
(set! location (cons (car location) value)))))
이 대부분 작품,하지만 원형 목록에 대한 : 하나 나에게 도움이되지 않았다 let
에서 매크로 몸을 포장
#; mickey> (define x (list 1 2))
#; mickey> x
(1 2)
#; mickey> (set-cdr! x x)
#; mickey> x
(1 1 2)
때문에 (set! (cons (car location) value)
일 때 value
은 이미 '(1 2)
으로 평가되었습니다.
(set! location (cons (car location) value))
식 (cons (car location) value)
에서
왜 박사 라켓에 mpair 라이브러리를 사용하지? 당신은 (scheme/mpair가 필요함) (list mlist를 정의하십시오) ... (cons mcons를 정의하십시오) ... (set-car! set-mcar!) .. 등등을 사용할 수 있습니다. 그러나 여러분의 모든리스트는 기본적으로 변경할 수 있습니다. –
@Rajesh : C++에서 처음부터 거의 완성 된 Scheme을 작성했기 때문에 :-) 나는 C++로 구현 된 많은 함수 대신에 스키마 파일로 라이브러리에있는 많은 함수를 사용할 수 있습니다. 그러나 제안에 감사드립니다! – csl
수술 기능은 기본 요소 여야합니다. 그게 다야. 치킨 계획에 –