ТЛ; др; Типом является главной абстракцией над продолжением
Продолжением является тип его входов и выходов.
Самое близкое, что вы найдете к продолжению, не основанному на процедурах, - это, вероятно, монада продолжения в Haskell, поскольку она выражается в виде типа, для которого многие функции могут использоваться для взаимодействия с типом для прерывания, возобновления, возврата и т. Д.
Вы можете инкапсулировать это замыкание в тип, такой как Cont
тип в Haskell, где вы получаете абстракцию монады как «абстракцию более высокого уровня», и есть другие формы абстракции над продолжениями, которые вы получаете, когда вы смотрите на продолжение как на тип вместо просто процедура , например
- Вы можете взять два продолжения и сделать альтернативу между ними, если тип следует законам, чтобы быть моноидом
- Вы можете абстрагироваться от типа, чтобы изменить входной или выходной типы продолжения, если вы инкапсулируете замыкание в тип, который подчиняется законам функтора.
- Вы можете произвольно и частично применить или украсить свое продолжение с помощью таких функций, как проверка ввода или преобразование ввода, если вы инкапсулируете замыкание в тип, который следует законам аппликативного функтора
Закрытие против Процедуры
В конце дня вы в основном правы; продолжение - это «процедура», хотя я бы скорее назвал это закрытием. Часто продолжения лучше всего выражать как замыкания первого класса, которые окружают связанную среду. В чистом функциональном языке вы можете сказать, что это не особенно разумно, потому что у вас нет ссылок; это верно, но вы можете заключить значения, и одно присваивание делает вложение значения и ссылки в одно и то же. Это рождает в Хаскеле:
(\x -> \y -> insideYIcanAccess x (and y))
В языке, в котором отсутствует способность заключать в себе связывающую среду, технически могут отсутствовать замыкания первого класса, но даже в этом случае существует некоторая среда (обычно глобальная), доступная для замыкания.
Поэтому я бы сказал, что более точно описать продолжение как: замыкание, используемое определенным образом.
Вывод
На вопрос "Возможно ли продолжение каким-либо образом, кроме процедуры?" Нет. Если у вас нет функций первого класса, вы действительно не можете иметь продолжения как таковые (да, указатели на функции считаются функциями первого класса, так что в качестве альтернативы может быть достаточно произвольного доступа к памяти).
Теперь вопрос «Есть ли способы выразить продолжение более абстрактным способом, чем процедура?» Выражение его как типа дает вам гораздо большую абстракцию, позволяя вам обрабатывать продолжение в самых общих чертах, так что вы можете взаимодействовать с продолжением многими другими способами, а не просто выполнять его.