Что такое административные редексы после конвертации CPS?

В контексте преобразования Scheme и CPS я немного затрудняюсь решить, что административные редексы (лямбды) точно такие:

  • все лямбда-выражения, введенные преобразованием CPS
  • только лямбда-выражения, которые вводятся при преобразовании CPS, но вы бы не написали их, если бы выполняли преобразование "вручную" или с помощью более умного CPS-преобразователя

Если возможно, хорошая ссылка будет приветствоваться.


person eljenso    schedule 23.01.2010    source источник


Ответы (2)


Redex означает «приводимое выражение», то есть выражение, не являющееся значением. Следовательно, лямбда — это не редекс, а вызов.
В CPS административный редекс — это редекс, оператором которого является лямбда-продолжение. Такие редексы можно сразу уменьшить, потому что вы знаете, какую функцию вызываете.
Например, ((lambda (u) ...) foo) — это административный редекс, а (k foo) — нет.

person dimvar    schedule 09.06.2010

Думаю, я нашел свой ответ. (Редактировать: вместо этого я принял ответ dimvar, он короче и правильнее.)

Предполагая, что входная программа не является полностью CPS, по крайней мере одна точка возврата процедуры должна быть преобразована в продолжение путем преобразования CPS. Таким образом, это продолжение вводится преобразованием и необходимо. Поскольку это необходимо, вам всегда нужно будет делать это, например, при конвертации вручную. Следовательно, административные редексы — это только те лямбда-выражения, введенные преобразованием CPS, которые на самом деле не нужны (мое второе определение).

Я нашел статью, в которой это объясняется следующим образом ( выделение мое):

Однако наивное λ-кодирование в CPS порождает довольно впечатляющее раздувание лямбда-выражений, большинство из которых образуют административные редексы, которые можно безопасно сократить. Административные сокращения дают термины CPS, соответствующие тому, что можно было бы написать от руки. Таким образом, устранение как можно большего количества административных редексов во время преобразования CPS стало проблемой.

Тем не менее, любые замечания или предложения приветствуются, конечно.

person eljenso    schedule 23.01.2010
comment
@Darius: статья CPS Transform of Beta Redexes (я читаю ее прямо сейчас). Вот ссылка: brics.dk/RS/04 /39/BRICS-RS-04-39.pdf - person Alexandre C.; 18.05.2011