cadr、caddr 等的可变版本
我想知道如何在 Racket 中实现 cadr、caddr 等的可变版本,而不需要单独定义每个版本? IE。 not
(define (mcadr exp)
(mcar (mcdr exp)))
似乎对于可变列表或对,Racket 仅支持 mcar 和 mcdr,但不支持“扩展”版本。我需要了解并擅长宏才能做到这一点吗?
I'm wondering how to implement mutable versions of cadr, caddr, and the likes in Racket without defining each one separately? ie. not
(define (mcadr exp)
(mcar (mcdr exp)))
It seems that for mutable lists or pairs, Racket only supports mcar and mcdr but not the "expanded" versions. Do I need to know and be good at macros to be able to do this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是一个宏解决方案:
Here's a macro solution:
你可以这样做:
但是并没有真正避免重复。即使在 Racket 源代码中(查看
racket/src/list.c
),也存在重复,尽管用 C 宏进行了一些美化。You could do:
But there is no real getting around the repetition. Even in the Racket source (look in
racket/src/list.c
), the repetition is there, albeit prettified a little with C macros.