2

私は、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 つの可能な解決策を考えましたが、どれもあまり好きではありません。

また悪い再帰の夢を見る前に助けてください。

4

1 に答える 1

4

あなたが何をしようとしているのかわからない。具体的には、-able コードでファイルを生成しようとするのevalは奇妙な選択のように思えます。いずれにせよ、ランダムな値のシリアル化を作成することは、構造体を扱っているときに問題になります。同じ名前の異なる構造体が存在する可能性があるためです。あなたに関連するかもしれないいくつかのポイント:

  • scheme/faslバイナリ形式で値を読み書きできるドキュメント化されていないライブラリがあります (大きなデータに役立ちます)。

  • またmzlib/pconvert、DrScheme が値を評価可能な式として出力するために使用するライブラリもあります (ただし、これはすべての種類のデータで機能するとは限りません)。

  • 読みやすい形式で非常に簡単に記述できる構造体を使用する場合は、「プレハブ」構造体を使用できます。

(詳細については、メーリング リストで質問するのがおそらく最善です。)

于 2010-02-20T06:10:24.440 に答える