使用命名变量球拍变量?(Naming variables using variables in Ra

2019-10-22 12:38发布

如果我有两个变量,例如

(define x 10)
(define y 20)

我想创建一个新的变量,用xy要创建的名称的值,我将如何去这样做?

例如,让我们说,我想打一个新的变量称为可变XY

(define variable-x-y "some-value")

在这种情况下,X是10和y是20。

基本上概括了一切,我希望能够进入可变10-20,并使其返回“一些价值”

我很抱歉,如果这听起来像一个新手的问​​题。 我是很新的球拍。

编辑:另外,我怎么会去,如果只是给定的xy的值检索(计划内)的值?

例如,让我们说,不知怎的,我能够定义以下内容:

(define variable-10-20 "some-value")

(define x 10)
(define y 20)

有没有办法为我写可变XY和找回“一些价值”?

编辑2这里是我想要实现的简化代码。 它所做的是它递归读取每个元素进入,然后可以使用这一切都被“阅读”后的局部变量。 我敢肯定,如果你调整使用中发现该方法的代码在这里它应该只是罚款。

(define (matrix->variables matrix)
  (local [(define (matrix2->variables/acc matrix2 x y)
            (cond
              [;; the entire matrix has "extracted" it's elements into variables
               (empty? matrix2)
               #|This is where the main program goes for using the variables|#]
              [;; the first row has "extracted" it's elements into variables
               (empty? (first matrix2))
               (matrix2->variables/acc (rest matrix2) 0 (add1 y))]
              [else (local [(define element-x-y "some-value")]
                      ;; Here is where I got stuck since I couldn't find a way to
                      ;; name the variable being created (element-x-y)
                      (matrix2->variables/acc
                       (cons (rest (first matrix2)) (rest matrix2))
                       (add1 x) y))]))]
    (matrix2->variables/acc matrix 0 0)))

Answer 1:

我想你是误会怎么定义变量的运行方式。 当你创建一个变量名,你必须知道如何称呼它,你不能define动态名字。

也许对于存储绑定哈希表将是有益的,它有点类似于你问什么,并模拟其动态定义的变量-但我仍然不知道为什么你要做到这一点,听起来更像是一个XY的问题给我。 尝试这个:

(define (create-key var1 var2)
  (string->symbol
   (string-append 
    "variable-"
    (number->string var1)
    "-"
    (number->string var2))))

; create a new "variable"
(define x 10)
(define y 20)
(create-key x y)
=> 'variable-10-20

; use a hash for storing "variables"
(define vars (make-hash))

; add a new "variable" to hash
(hash-set! vars (create-key x y) "some-value")

; retrieve the "variable" value from hash
(hash-ref vars 'variable-10-20)
=> "some-value"


Answer 2:

相反的是洛佩斯先生说,变量名可以在运行时决定的,而是只在顶层或模块级别。 要做到这一点的模块中:

(compile-enforce-module-constants #f)
(eval `(define ,(string->symbol "foo") 'bar) (current-namespace))

这是否是做正确的或错误的事情完全是另外一个问题。

当您试图访问这些变量,你会碰到同样的问题,所以你必须使用eval那里。 你不能导出这些变量provide



文章来源: Naming variables using variables in Racket?