2013-12-07 2 views

ответ

7

Короткий Racket letrec и R6RS letrec* такой же. Для этого указан порядок оценки. В R5RS letrec заказ не указан.

Поскольку порядок R5RS letrec неопределенна реализация может выбрать фиксированный порядок (например, слева направо), или они могут позволить компилятору выбирать различные заказы для каждого использования (для того, чтобы получить более быстрый код).

Из документации для ракетки.

R5RS letrec:

Семантика: < переменной> ы обязана свежие места, занимающих неопределенных значений, то < инициализация> s вычисляются в результате среды (в некотором произвольном порядке), каждый из < variable> присваивается к результату соответствующего < init>, тело <> оценивается в полученной окружающей среде, и значение (-ы) последнего выражения в < body>() возвращено. Каждое связывание переменной <> имеет полное выражение letrec в качестве своей области, что позволяет определять взаимно рекурсивные процедуры между .

Racket letrec:

Как позволить, в том числе и слева-направо оценок VAL-exprs, но места для всех идентификаторов создаются первыми и заполнены # < неопределенной>, всех ids связаны во всех val-exprs, а также с bodys, и каждый id устанавливается сразу после вычисления соответствующего val-expr. Идентификаторы должны быть разными в соответствии с bound-identifier = ?.

R6RS letrec*:

Семантика: The < переменной> ы привязанные к свежим местам, каждый < переменной> присваивается в левом-направо, чтобы в результате оценки соответствующего < init>, тело <> оценивается в итоговой среде , и возвращаются значения последнего выражения в < body> . Несмотря на оценку и назначение слева направо , каждое связывание переменной < имеет в своем регионе все значение letrec * , что позволяет определять взаимно рекурсивные процедуры .

+0

Для полноты вам может потребоваться добавить семантику R7RS, так как R7RS является официальным. – GoZoner

+0

Насколько я могу судить, не было никаких изменений в значении letrec и letrec * в R7RS. То есть, letrec в R7RS имеет то же значение, что и в R5RS и R6RS. В R7RS letrec * имеет то же значение, что и в R6RS. – soegaard