2010-02-19 2 views
0

(apply f '(x1 x2 x3 .... xn)) 가지고 있고 그것을 매크로 확장을 변경하고 싶습니다. : (f x1 x2 x3...xn). 어떤 종류의 문제가 발생할 수 있습니까?내가 가지고있는 경우 : (적용 f '(x1 x2 x3 .... xn)) 및 매크로 확장을 변경하려면

+2

다른 8 가지 질문을 수락하지 않았습니다. 그들 중 누구도 당신의 질문에 대한 정답이 아니 었습니까? (그중 몇몇이) 인 경우에, 그 (것)들을 통과하고 그 정확한 응답을 받아들이는 시간을내어주십시오 (다만 응답의 옆에 "V"같이 아이콘을 똑딱 거리십시오). –

답변

2

그냥

(define-macro (my-other-apply f args) 
    `(,f ,@args)) 

(define (my-apply f args) 
    (apply f args)) 

변환하는 경우는 다음 충분히 간단한 것 같다. 이 상황에서 가장 큰 함정은 매크로에 전달한 목록을 인용하지 않는 것을 기억해야한다는 것입니다.

>(my-apply + '(1 2 3)) 
>6 

>(my-other-apply + '(1 2 3)) 
>ERROR syntax-error: "(+ quote 1 2 3)" 

>(my-other-apply + (1 2 3)) 
>6