私は、Scheme 式をいくつかのフィールドの値として受け入れるアプリケーション (ジャグリング パターン アニメーター) を PLT Scheme で作成しています。私は、式をまだ評価できる式に「分解」できる小さなテキストエディタを作成しようとしていますが、手動で調整するためのリテラルとしてデータを含みます。
例えば、
(4hss->sexp "747")
正当なパターンを生成する関数呼び出しです。それを評価して印刷すると、
(((7 3) - - -) (- - (4 2) -) (- (7 2) - -) (- - - (7 1)) ((4 0) - - -) (- - (7 0) -) (- (7 2) - -) (- - - (4 3)) ((7 3) - - -) (- - (7 0) -) (- (4 1) - -) (- - - (7 1)))
文字列として「読み取る」ことはできますが、関数と同じように「評価」することはできません。もちろん、このステートメントでは、必要なものは次のように単純です。
(quote (((7 3...
しかし、他の例は自明ではありません。たとえば、これにはベクトルとして出力される構造体が含まれています。
pair-of-jugglers
; -->
(#(struct:hand #(struct:position -0.35 2.0 1.0) #(struct:position -0.6 2.05 1.1) 1.832595714594046) #(struct:hand #(struct:position 0.35 2.0 1.0) #(struct:position 0.6 2.0500000000000003 1.1) 1.308996938995747) #(struct:hand #(struct:position 0.35 -2.0 1.0) #(struct:position 0.6 -2.05 1.1) -1.3089969389957472) #(struct:hand #(struct:position -0.35 -2.0 1.0) #(struct:position -0.6 -2.05 1.1) -1.8325957145940461))
私は少なくとも 3 つの可能な解決策を考えましたが、どれもあまり好きではありません。
また悪い再帰の夢を見る前に助けてください。