【发布时间】:2016-12-24 00:13:48
【问题描述】:
我是 Racket 的新手,我尝试运行 Chris Jester-Young 的解决方案 (How to convert string to variable-name in scheme) 来将字符串转换为变量名(反过来,也就是将变量名转换为字符串):
#lang racket
(define-syntax string->variable-name
(lambda (stx)
(syntax-case stx ()
((_ str)
(string? (syntax->datum #'str))
(datum->syntax #'str (string->symbol (syntax->datum #'str)))))))
(define-syntax variable-name->string
(lambda (stx)
(syntax-case stx ()
((_ id)
(identifier? #'id)
(datum->syntax #'id (symbol->string (syntax->datum #'id)))))))
variable-name->string 没问题,这里是一个例子:
>(define myvar 10)
>(variable-name->string myvar)
"myvar"
但是,string->variable-name 没有成功:
>(define (string->variable-name "myvar2") 4)
error define: not an identifier, identifier with default, or keyword
for procedure argument in: "myvar2"
我正在使用Racket 6.6,linux mint 17.3 64bits。
我的主要目标是如何将字符串转换为变量名(标识符)。
我想知道:
- 读取文本文件;
- 从该文本文件中获取变量的名称(字符串);和
- 使用
define将变量名设置为随机整数。
任何帮助我都会感激不尽。
【问题讨论】:
-
使用
(variable-name->string foo)调用名称为variable-name->string的宏。(define (variable-name->string ...表示您正在定义一个名为variable-name->string的函数,并且由于“myvar2”不是函数参数的合法名称,因此您会收到错误。 -
你想用这个做什么?从变量更改为字符串的宏会在编译时进行。另一种方式也需要如此,这样你以后就永远不能用这些来做任何有用的事情了。
-
阅读纯文本文件是学术工作的要求。此外,我必须构建一个能够: 1- 读取纯文本文件的程序; 2-从该纯文本文件中提取一些字符串; 3-将该字符串动态分配给变量名; 4-用那个变量做一些计算; 5- 最后,将结果写到纯文本文件中。除了第 3 步之外,我在所有这些步骤中都取得了成功。
-
希望您已经了解了正在发生的事情。 @soegaard 的回答是正确的;只需在另一个电话之前拨打
(define myvar2 1)
标签: string variables dynamic racket definition