Re: Лямбда-исчисление в рефале


Subject: Re: Лямбда-исчисление в рефале
From: Arkady Klimov (klark@bagirra.net)
Date: Tue Aug 28 2001 - 21:28:03 MSD


----- Original Message -----
From: Sergei M. Abramov (at home) <abram@botik.ru>
To: Arkady Klimov <klark@bagirra.net>; Mike Potanin <potanin@mccme.ru>; <refal@botik.ru>
Sent: Tuesday, August 28, 2001 6:50 PM
Subject: Re: Лямбда-исчисление в рефале.

| >А поскольку результат <Adder ...> - замыкание, то есть сама функция, а не ее
| имя
| >(идентификатор), то и писать надо просто <<Adder1> 2>. Правда в рефале-5 такая
| >запись невозможна (в отличие от рефалов 6 и +).
|
| Ooops! В Рефале Плюс, как я помню, за "<" всегда должен идти имя функции
| (слово-константа-имя-функции).
|
| А для аппликации есть библиотечная Apply. И у этой Apply весьма строгий формат:
|
| $func? Apply sF eX = eY;
|
| (*** Более точно---цитирую документацию:
|
| > 3.APPLY: ВЫЗОВ ФУНКЦИЙ ПЕРЕДАННЫХ ЧЕРЕЗ ПАРАМЕТРЫ
| >
| > $func? APPLY s.Name e.Exp = e.Exp;
| >
| > APPLY применяет функцию, на которую указывает ссылка s.Name
| > к выражению e.Exp и выдает результат этого вычисления.
|
| ***)
|
| При этом (если мне не изменяет память) в run-time эта Apply контролирует, что
| переданный ей sF есть имя функции с таким вот форматом:
|
| $func? sF eX = eY;
|
| или с таким:
|
| $func sF eX = eY;
|

Имеется в виду, наверно:
     $func? Fname eX = eY;
     $func Fname eX = eY;
где Fname - имя переданной функции sF (= значение переменной sF). [Надо бы написать
Fname курсивом, да формат не позволяет.]

| И если это не так, то она (Apply) производит из себя $error -- если я не
| ошибаюсь...
|
| Так что, с греческими мю и с замыканиями в Рефале Плюс не очень-то. Ну,...
| компромис "интерпретация или компиляция".

Нет проблем! Просто писать на 5 или 6 знаков больше приходится. А содержательно
<Apply sF eX> это то же самое, что и <sF eX> в рефале-6 (если конечно, ограничиваться функциями формата e=e).
А от функции Mu из Р5 все это действительно отличается тем, что Mu еще производит неявное предварительное преобразование:
идентификатор -> символ-ссылка, например Proc -> &Proc в обозначениях Р+, причем непременно в среде того модуля, где это Mu
написано.

|
| Удачи
|
| Сергей



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:59 MSD