【问题标题】:Racket language: How to convert string to variable-name球拍语言:如何将字符串转换为变量名
【发布时间】: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。

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

我想知道:

  1. 读取文本文件;
  2. 从该文本文件中获取变量的名称(字符串);和
  3. 使用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


【解决方案1】:

您可以查看here的答案。

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

【讨论】:

  • 阅读纯文本文件是学术工作的要求。此外,我必须构建一个能够: 1- 读取纯文本文件的程序; 2-从该纯文本文件中提取一些字符串; 3-将该字符串动态分配给变量名; 4-用那个变量做一些计算; 5- 最后,将结果写到纯文本文件中。除了第 3 步之外,我在所有这些步骤中都取得了成功。
  • 试图详细说明我正在尝试做的事情:(define temp_var "Xi");字符串“Xi”是从文本文件中提取的。 (define (display temp_var) 2 );和(define Xi 2)一样吗? (display Xi) ; 未定义错误 Xi。 (+ Xi 3) ;结果是否等于 5?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 2010-12-04
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多