Я пишу приложение (A аниматор шаблонов жонглирования ) в схеме PLT, которое принимает выражения схемы в качестве значений для некоторых полей. Я пытаюсь написать небольшой текстовый редактор, который будет позволять мне "разбивать" выражения на выражения, которые все еще могут быть вычислены, но содержат данные в виде литералов для ручной настройки.
Например,
(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))
Я подумал, по крайней мере, о трех возможных решениях, ни одно из которых мне не очень нравится.
Помогите мне, прежде чем у меня снова начнутся плохие рекурсивные сны.