Продолжение k
- это функция, которая берет результат из evenk
, выполняет "остальную часть вычисления" и выдает "ответ". Тип ответа и то, что вы подразумеваете под «остальной частью вычислений», зависит от того, что вы используете CPS для . CPS, как правило, не является самоцелью, но делается с определенной целью. Например, в форме CPS очень легко реализовать операторы управления или оптимизировать оконечные вызовы. Не зная, чего вы пытаетесь достичь, трудно ответить на ваш вопрос.
Для чего это стоит, если вы просто пытаетесь перейти от прямого стиля к стилю передачи продолжения, и все, что вас волнует, это значение ответа, передавая функцию тождества, так как продолжение является правильным. *
Хорошим следующим шагом будет внедрение evenk
с использованием CPS. Я сделаю более простой пример.
Если у меня есть функция прямого стиля
let muladd x i n = x + i * n
и если я предполагаю, что примитивы CPS mulk
и addk
, я могу написать
let muladdk x i n k =
let k' product = addk x product k in
mulk i n k'
И вы увидите, что сначала выполняется мультипликация, затем она «продолжает» с k'
, который выполняет сложение, и, наконец, continues
с k
, который возвращает вызывающему. Основная идея заключается в том, что в теле muladdk
я выделил новое продолжение k'
, которое обозначает промежуточную точку в функции умножения-сложения. Чтобы ваша evenk
работала, вам нужно выделить хотя бы одно такое продолжение.
Надеюсь, это поможет.