私はSchemeに慣れ親しんでいますが、おそらく私の側の根本的な誤解を反映している問題にぶつかりました。
たとえば、Scheme で次のことを行うとします (この場合は Guile を使用しますが、Chicken でも同じです)。
> (define x 5)
> x
5
> (string->symbol "x")
x
> (+ 5 (string->symbol "x"))
<unnamed port>:45:0: In procedure #<procedure 1b84960 at <current input>:45:0 ()>:
<unnamed port>:45:0: In procedure +: Wrong type: x
> (symbol? (string->symbol "x"))
#t
> (+ 5 x) ; here x is dereferenced to its value 5
10
> (+ 5 'x) ; here x is not dereferenced
<unnamed port>:47:0: In procedure #<procedure 1c7ba60 at <current input>:47:0 ()>:
<unnamed port>:47:0: In procedure +: Wrong type: x
が効果的に引用されてstring->symbol
いるシンボル を返していることを理解しています。ただし、後でコンテキストでx
返されたシンボルを使用する方法がわかりません。string->symbol
どうすればSchemeにそのシンボルを評価させることができますか?
なぜこれをやりたいのかという背景を説明すると、Guile を組み込んだ C プログラムを書いているからです。scm_from_*_symbol
または などを使用して、C から名前で Guile で定義されたシンボルにアクセスできるようにしたいと考えていますscm_string_to_symbol
。これらの関数が思ったように機能しない理由は、上記の私の中心的な質問に関連しています。私が Guile でやりたいことを行うためのより良い方法があるかもしれませんが、それは別の問題です。今、私は上記の基本的な質問に興味があります。