我正在研究神话宏中的示例,并且完全被
result6
难住了。
目标是替换以下代码片段中的
???-pattern
和 ???-template
,以使其评估为 true。
(define result6
(with-syntax
([???-pattern (syntax ((a (1 "alpha") (2 "beta"))
(b (3 "gamma") (4 "delta"))))])
(syntax ???-template)))
(equal? (syntax->datum result6)
'((a b) (1 2 3 4) ("alpha" "beta" "gamma" "delta")))
我认为我的模式是正确的,但不知道如何制作模板以及可能的拼接。我最好的迭代:
(define result6
(with-syntax
([ ((l (n text) ...) ...)
#'((a (1 "alpha") (2 "beta"))
(b (3 "gamma") (4 "delta")))])
#'( (l ...) (~@ n ...) ... ) ))
这产生:
`((a b) 1 2 3 4)
我还没有获得
text
模板来处理我尝试的任何内容。你如何解决这个问题?我对此缺少什么?
明白了!
我使模式解析更加明确,然后通过模板进行调整。
(define syntax-example
#'((a (1 "alpha") (2 "beta")) (b (3 "gamma") (4 "delta"))))
(define result6
(with-syntax
([ ( (l (n1 t1) (n2 t2)) ...) syntax-example])
#'( (l ...) ((~@ n1 n2) ...) ((~@ t1 t2) ... ))))