首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新定义内置的方案,但只在将其用作特定过程的参数时?

重新定义内置的方案,但只在将其用作特定过程的参数时?
EN

Stack Overflow用户
提问于 2018-08-31 23:54:02
回答 1查看 150关注 0票数 0

仅当过程and作为过程fetch的参数被调用时,才能重新定义过程fetch

例如:

代码语言:javascript
复制
; this `and` returns #f
(and #t #f)

; this `and` returns "and a b" 
(fetch (foo (bar (and "a" "b"))))

我想编写一个宏来完成这个任务,但是我想不出如何在传递给and的任意参数树中编写一个匹配fetch的模式。

我使用鸡,并很高兴使用与鸡的支持一样多的R7RS。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-01 15:36:57

一个棘手的问题是:and不是一个过程,而是语法(想想看:一旦遇到第一个#f,就会停止计算)。

但无论如何,我不认为您想要做的事情是通过覆盖and实现的。您需要将fetch转换为宏。我不会试图扫描输入并替换and,而是使用不卫生的let在本地覆盖and的含义。有点像这样:

代码语言:javascript
复制
(define my-local-and ...)
(define the-real-fetch ...)

(define-syntax fetch
  (ir-macro-transformer
    (lambda (e i c)
      `(let ((,(i 'and) my-local-and))
         (the-real-fetch ,@(cdr e))))))

不过,我真的反对这一点,因为这将严重影响用户对正在发生的事情的期望。也许您可以更多地解释一下,为什么想要这样做?

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

https://stackoverflow.com/questions/52123798

复制
相关文章

相似问题

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