首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >球拍中宏的递归扩展?

球拍中宏的递归扩展?
EN

Stack Overflow用户
提问于 2018-08-17 14:23:41
回答 1查看 266关注 0票数 1

我想知道是否有一种方法可以对宏进行递归扩展?

代码语言:javascript
复制
(define-syntax my-define
  (syntax-rules ()
   [(my-define (fn v ...) body) #'(define (fn v ...) body)]))


(define-syntax my-let
  (syntax-rules ()
    [(my-let ([v e] ...) body) #'(let ([v e] ...) body)]))

;(my-define (f1 a) a)
; this returns (define (f1 a) a)

;(my-let ([x 10]) x)
; this returns (let ([x 10]) x)

(my-define (f1 a) (my-let ([x 10]) x))
; but this returns (define (f1 a) (my-let [x 10] x)))

不知何故,嵌套的案例并未展开。我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 23:15:04

当您删除#' (您可能将其放入调试中)时,似乎工作得很好:

代码语言:javascript
复制
#lang racket

(define-syntax my-define
  (syntax-rules ()
    [(my-define (fn v ...) body) 
        (define (fn v ...) body)]))


(define-syntax my-let
  (syntax-rules ()
    [(my-let ([v e] ...) body)
        (let ([v e] ...) body)]))

(my-define (fact n)
  (my-let ([k (- n 1)])
    (if (zero? n) 1 (* n (fact k)))))

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

https://stackoverflow.com/questions/51889497

复制
相关文章

相似问题

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