Racket 语言:如何将字符串转换为变量名

Ale*_*eia 5 string variables dynamic definition racket

我对 Racket 很陌生,我尝试运行Chris Jester-Young的解决方案(How to conversion string to variable-name in schema)将字符串转换为变量名(及其相反,换句话说,将变量名转换为细绳):

#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)))))))
Run Code Online (Sandbox Code Playgroud)

这对于 来说很好variable-name->string,这里是一个例子:

>(define myvar 10)
>(variable-name->string myvar)
  "myvar"
Run Code Online (Sandbox Code Playgroud)

但是,我没有成功string->variable-name

>(define (string->variable-name "myvar2") 4)
    error define: not an identifier, identifier with default, or keyword
    for procedure argument in: "myvar2"
Run Code Online (Sandbox Code Playgroud)

我使用的是Racket 6.6,linux mint 17.3 64 位。

我的主要目标是如何将字符串转换为变量名(标识符)。

我想知道:

  1. 读取文本文件;
  2. 从该文本文件中获取变量的名称(字符串);和
  3. 用于使用define随机整数设置变量名称。

任何帮助我都会感激。

Boh*_*nov 0

您可以从这里查看答案。

有人建议我不要使用字符串,而应使用标识符。因此,您可以使用另一个带有您想要使用的标识符的 Racket 源,而不是使用纯文本文件,然后只需导入该文件即可。