在球拍中定义函数内的全局变量

时间:2015-10-14 18:22:27

标签: racket

如何在另一个可以在球拍中全局访问的函数中定义一个函数?

2 个答案:

答案 0 :(得分:1)

我所知道的唯一简单方法是在顶层定义一个绑定,以后可以在函数内修改:

Welcome to Racket v6.2.1.
-> (define gf add1)
-> (define (redefine-gf) (set! gf sub1))
-> (gf 1)
2
-> (redefine-gf)
-> (gf 1)
0

答案 1 :(得分:0)

嗯,这个问题似乎很奇怪,因为leeor评论道。

  

如何在另一个可以在球拍中全局访问的函数中定义一个函数?

在函数g中定义函数f时,您的意思应该是全局可访问的?在g的情况下,努力是奇怪的。但是如果你只是想问一下如何在g内正式定义一个只能通过调用f间接调用的辅助函数f,那么它将如下所示:

(define (f n)
  (define (g n)
    n)

  (g n))

这显然只输出输入。但是,您无法通过g之外的名称来呼叫f。你可以在一个封闭的函数体中拥有任意数量的定义,只要它不是这个外部函数中的最后一个语句。

无论如何,您可能希望看一看: Racket Guide