Оба letrec
и letrec*
находятся в R6RS, но есть onlyletrec
в Racket, no letrec*
. Каковы различия между ними?В чем разница между версиями `letrec`,` letrec *` и Racket R6RS `letrec`?
ответ
Короткий Racket letrec
и R6RS letrec*
такой же. Для этого указан порядок оценки. В R5RS letrec
заказ не указан.
Поскольку порядок R5RS letrec
неопределенна реализация может выбрать фиксированный порядок (например, слева направо), или они могут позволить компилятору выбирать различные заказы для каждого использования (для того, чтобы получить более быстрый код).
Из документации для ракетки.
Семантика: < переменной> ы обязана свежие места, занимающих неопределенных значений, то < инициализация> s вычисляются в результате среды (в некотором произвольном порядке), каждый из < variable> присваивается к результату соответствующего < init>, тело <> оценивается в полученной окружающей среде, и значение (-ы) последнего выражения в < body>() возвращено. Каждое связывание переменной <> имеет полное выражение letrec в качестве своей области, что позволяет определять взаимно рекурсивные процедуры между .
Как позволить, в том числе и слева-направо оценок VAL-exprs, но места для всех идентификаторов создаются первыми и заполнены # < неопределенной>, всех ids связаны во всех val-exprs, а также с bodys, и каждый id устанавливается сразу после вычисления соответствующего val-expr. Идентификаторы должны быть разными в соответствии с bound-identifier = ?.
Семантика: The < переменной> ы привязанные к свежим местам, каждый < переменной> присваивается в левом-направо, чтобы в результате оценки соответствующего < init>, тело <> оценивается в итоговой среде , и возвращаются значения последнего выражения в < body> . Несмотря на оценку и назначение слева направо , каждое связывание переменной < имеет в своем регионе все значение letrec * , что позволяет определять взаимно рекурсивные процедуры .
Для полноты вам может потребоваться добавить семантику R7RS, так как R7RS является официальным. – GoZoner
Насколько я могу судить, не было никаких изменений в значении letrec и letrec * в R7RS. То есть, letrec в R7RS имеет то же значение, что и в R5RS и R6RS. В R7RS letrec * имеет то же значение, что и в R6RS. – soegaard