首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >球拍-宏-定义函数

球拍-宏-定义函数
EN

Stack Overflow用户
提问于 2018-07-15 01:11:37
回答 0查看 413关注 0票数 0

因此,我正在寻找一个宏,它可以更容易地编写函数,该函数接受s表达式和列表作为输入,并在列表中的s表达式之一与输入中的s表达式匹配时执行某些操作。我注意到这些函数中的许多函数都具有相同的外观。

所以,我写了以下内容:

代码语言:javascript
复制
(define-syntax (ember stx)
  (syntax-parse stx
    [(ember name terminal match recurse) #'(define name (lambda (s l)
                                                          (cond
                                                            [(null? l) terminal]
                                                            [(eq? (car l) s) match]
                                                            [else recurse])))]))

(ember member #f #t (match s (cdr l)))

不幸的是,这不起作用,因为s是一个未绑定的标识符。我尝试用引号将其括起来,然后在宏中放置一个eval,但这也导致了一个未绑定的标识符。

因此,我重写了我的代码,如下所示,它可以工作:

代码语言:javascript
复制
(define-syntax (ember stx)
  (syntax-parse stx
    [(ember name terminal match recurse) #'(define name (lambda (s l)
                                                          (cond
                                                            [(null? l) (terminal s l)]
                                                            [(eq? (car l) s) (match s l)]
                                                            [else (recurse s l)])))]))

(ember member (lambda (x y) #f) (lambda (x y) #t) (lambda (x y) (match x (cdr y))))

但是,不幸的是,如果我的匹配定义变得如此复杂,那么复制成员函数并通过手动编辑terminal、match和recurse选项所在的位置来创建相同类型的新函数似乎更容易。

有没有更好的方法来做这件事?

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51341642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档