Частичная оценка в схеме

Я пытаюсь использовать Scheme в распределенной системе. Идея состоит в том, что один процесс оценивает некоторые выражения и передает их другому процессу для завершения.

Пример:

(do-stuff (f1 x) (f2 x))

будет оценивать

(do-stuff res1 (f2 x))

в первом процессе. Этот процесс передает выражение в виде строки другому процессу (на другом узле), который оценивает его как

(do-stuff res1 res2)

Идея состоит в том, чтобы сделать карту, уменьшающую распределение работы по стилю, но путем передачи выражений схемы. Это возможно? Любые указатели будут полезны. (Кстати, я использую IronScheme).


person biozinc    schedule 13.02.2012    source источник
comment
Непонятно, что вы спрашиваете. Можно ли реализовать карту/уменьшить в схеме? Да, конечно, учитывая правильную многозадачную библиотеку.   -  person Fred Foo    schedule 14.02.2012
comment
Это может быть вопрос, связанный с реализацией. У Racket есть свои библиотеки futures и places. Вы можете найти введение здесь, в разделах 18.10 и 18.11: >docs.racket-lang.org/guide/ К сожалению, я недостаточно знаком с миром IronScheme, чтобы указывать эквивалентные библиотеки.   -  person dyoo    schedule 14.02.2012
comment
Вы можете использовать delay и force, но, как сказал @larsmans, понятия не имею, что вы имеете в виду. do-stuff делает здесь несколько вещей, что сбивает с толку/двусмысленно.   -  person leppie    schedule 14.02.2012
comment
Кроме того, к моменту запуска кода все секспры (кода) исчезают, компилируются. В настоящее время IronScheme не поддерживает процедуры сериализации, так что имейте это в виду (не уверен, что это когда-нибудь произойдет).   -  person leppie    schedule 14.02.2012
comment
Как уже упоминалось delay и force, обратите внимание на макросы. В целом, макросы и обещания (delay дает обещание, force оценивает его) могут делать то, что вам нужно.   -  person paul    schedule 16.02.2012


Ответы (2)


Как предположил Aslan986, вам нужна поддержка для полных продолжений. К сожалению, Ironscheme не поддерживает полные продолжения, а только экранированные продолжения, которые идут вверх по стеку вызовов. См. известные ограничения Ironscheme. Кроме того, вам необходимо сериализовать продолжения, чтобы иметь возможность передавать их от одного процесса к другому. Как правило, это не всегда возможно, и лишь немногие системы Scheme поддерживают это. Одним из примеров является Gambit-C. Существует презентация, в которой показано, как реализовать распределенные вычисления< /а> система.

person ceving    schedule 13.06.2012

это не настоящий ответ, а просто намек.

Вы пробовали с продолжениями? Здесь

Я думаю, что может сделать то, что вам нужно.

person Aslan986    schedule 10.05.2012