簡體   English   中英

在 Scheme/Racket 中更改 lambda 之外的變量

[英]Change variable outside of lambda in Scheme/Racket

Racket 文檔中的示例始終帶有lambdahttps ://docs.racket-lang.org/syntax/Defining_Simple_Macros.html

我的define-syntax-parser是這樣的:

(require syntax/parse/define)
(define-syntax-parser sp
  [_ #'(lambda (x) (set! x (add1 x)))]
)

(define a 0)
((sp) a)
(display a)

可以做這樣的事情(刪除lambda )?

(require syntax/parse/define)
(define-syntax-parser sp
  [(f x) #'(set! x (add1 x))]
)

(define a 0)
(f a)
(display a)

結果預計為1但它仍然是0 並且 Scheme/Racket 不通過引用傳遞(?!),那么如何在 lambda 之外更改這些變量?

這里有一個相關的答案: https : //stackoverflow.com/a/8998055/5581893但它是關於已棄用的define-macrohttps://docs.racket-lang.org/compatibility/defmacro.html

宏可以擴展到任何東西,而不僅僅是lambda

#lang racket

(require syntax/parse/define)

(define-simple-macro (sp x:id) (set! x (add1 x)))

(define a 0)
(sp a)
(display a)

或者,如果您更喜歡使用define-syntax-parser

#lang racket

(require syntax/parse/define)

(define-syntax-parser sp
  [(_ x:id) #'(set! x (add1 x))])

(define a 0)
(sp a)
(display a)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM