I am pretty new in Racket and I have tried to run Chris Jester-Young's solution (How to convert string to variable-name in scheme) to convert string to variable name (and its converse, in other words, conversing variable name to string):
#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)))))))
It was fine for variable-name->string, here an example:
>(define myvar 10)
>(variable-name->string myvar)
"myvar"
However, I had no success with string->variable-name:
>(define (string->variable-name "myvar2") 4)
error define: not an identifier, identifier with default, or keyword
for procedure argument in: "myvar2"
I am using Racket 6.6, linux mint 17.3 64bits.
My main goal is how to convert a string to a variable name (identifier).
I was wondering:
- to read a text file;
- to get the name of the variables (string) from that text file; and
- to use
defineto set the variable names with random integers.
Any help I will appreciate.
(variable-name->string foo)to invoke a macro with the namevariable-name->string. The(define (variable-name->string ...means that you are defining a function namedvariable-name->stringand since "myvar2" is not a legal name for a function argument, you get an error.(define myvar2 1)before the other call