我需要一些函数,其中包括其他东西将定义一个新的全局符号。所以,我可以用这样的:从函数内部定义全局
(define (func-prototype symbol value comment)
(define symbol value) ; this should somehow be reformulated
(format "~a=~a !~a\n" symbol value comment))
(define string-list (map func-prototype
'((s1 1 "first value")
(s2 20 "second value")
(s3 300 "third value))))
,并能够得到如下结果:
> string-list
'("s1=1 !first value\n"
"s2=20 !second value\n"
"s3=300 !third value\n")
> s1
1
> s2
20
> s3
300
这能实现的功能,或者是可以做到的,只有与帮助的宏?你能否建议任何可能的实现,或者至少提供一些可能有用的提示/参考?
强烈建议朝向奥斯卡的回答。由于潜在的名称冲突和难以控制范围,动态定义全局变量通常是一个非常糟糕的主意。相反,将绑定绑定到散列表通常是更简单和更有效的方法。 – dyoo 2013-03-12 01:50:11
如果您给我们更多的动机背景,那可能会提示更好的答案。你为什么要这样做?为了文档的功能?为了定义带有默认值的可选关键字参数的函数? – dyoo 2013-03-12 01:53:28
其动机如下:有一种建模软件,它有自己的'语言',但语言很丑陋(恕我直言)。我正在尝试编写一个可以代替我的代码。我的文章中的格式化字符串显示了变量的定义如何在目标语言中看起来像。对于一些变量来说,创建这样一个字符串就足够了。对于其他人,我也需要在环绕内使用它们的值。我想奥斯卡的解决方案对我来说是最好的。 – skobls 2013-03-12 09:12:11