Re: Refal-J: first release


Subject: Re: Refal-J: first release
From: Leonid Belous (belous@ilt.kharkov.ua)
Date: Fri Apr 25 2003 - 18:39:38 MSD


Привет, всем!

> Леня,
> у меня остались еще вопросы насчет Рефал-PHP, спрашиваю через группу,
> так как может это еще и другим интересно. См. ниже.
[...]
> | Именно так, ошибаешься. Обмен возможен в обоих направлениях. Но здесь я
не
> | могу (пока) состязаться в уровне интеграции с тем, что делается у тебя,
в
> | смысле эффективности реализации. Однако эта задача и не стояла у меня на
> | первом месте.
> Дело не в состязании: все-таки делались разные вещи. Но хотелось бы лучше
> понимать особенности каждой. Я хотел бы уточнить свое понимание
> системы Рефал-PHP (мне же надо будет ее упомянуть, сказав в двух
> словах об отличиях). Вот мои вопросы:
> 1. Верно ли, что связка Рефал-PHP выполнена на основе *реализации*
Рефал-5?
> Или там своя или значительно измененная (типа: подогнанная под структуры
> данных PHP) реализация.

Никаких изменений и подгонок не делалось. Используется последний дистрибутив
Рефала-5 с официального сайта
http://botik.ru/pub/local/scp/refal5/refal5.html .
Собственно все мои разработки выполнены в виде двух библиотек rphplib.ref и
rphplib.php на языках refal-5 и php соответственно. На уровень языка "C" я
пока не спускался.

> 2. Возвращаюсь к вопросу об обмене выражениями. Мой вопрос был не столько
> о возможности обмена "в обоих направлениях", сколько о структурах
> передаваемых при этом данных. Так все-таки, можно вызвать
> из рефала PHP-функцию и передать ей в качестве аргумента что-то вроде
> (A (B '*' 1) (()))
> ? И как это увидит функция на PHP? Как массив из трех элементов, где
второй
> и третий элементы - тоже массивы? Соответственно, может ли функция
> на PHP вызвать функцию рефала с такого рода аргументом? (Из беглого
взгляда
> на описание PHP и его системы типов, мне показалось, что массив PHP - это
> наверно самое близкое, из того, что там имеется, к рефальскому выражению).

Наверное проще всего рассмотреть и прокомментировать реальный короткий
пример
(Пример 2.5-1 Машинная арифметика. Из руководства по Refal-PHP
http://www.refal.net/~belous/rphprdoc.htm ).
Для того, чтобы не ссылаться на библиотеки, в пример включен и текст одной
из библиотечных функций.

*--------------------------------------------------------------------------
$EXTRN Php;
$ENTRY Go { =
      <Print <Evalf 'sin(0.235)+cos(1/3)'>>
}
* Evalf - evaluation type real expressions
Evalf {
      e.expression = <Php '$Evalf = ' e.expression '; echo $Evalf;'>;
}
*---------------------------------------------------------------------------
Эта программа печатает в результате число 1.1777999318272.

Пример показывает технику расширения возможностей языка Рефал-5, не имеющего
в последней редакции плавающей арифметики, введением таковой из языка PHP.
Интерфейсная рефал-функция <Php e.expression> не занимается исследованием
структуры выражения e.expression, а передает его AS IS интерпретатору PHP,
а уж, что он с ним будет делать ..... , естественно зависит от автора
программы, пишущего текст как на Рефале, так и на PHP.

Я могу передать твое выражение (A (B '*' 1) (())) статически (в виде строки
символов) или динамически, как e.expression, интерпретатору PHP, но ничего,
кроме ругани на фазе парсинга PHP мы не получим.

Я, как автор предыдущей программы, передаю PHP из Рефала синтаксически
правильное (в языке PHP) арифметическое выражение, НО не в голом виде, а
формирую два оператора - оператор присваивания и оператор вывода результата
этого присваивания (имена переменных в PHP начинаются со знака $).

Поток вывода перехватывается и выдается Рефалу как результат.

Естественно, никто не мешает мне написать на PHP программу, которая будет
заниматься осмысленным анализом твоего выражения, и передавать его ЕЙ (а не
просто интерпретатору PHP) в качестве аргумента для обработки.

Рефал-функция <Php e.expression> не обладает никаким дополнительным
встроенным интеллектом, а служит только двусторонним мостом для передачи
данных и управления между Refal и PHP интерпретаторами.

Вызов Рефала из PHP также возможен, но боюсь, что это уже оффтопик.

>
> Пока все.
> Заранее спасибо.
Алик, если я не совсем правильно понял вопросы, то заранее прошу прощения.
Готов продолжить обсуждение.

> С уважением,
> Аркадий
С уважением,
--Леонид

[...]

----- Исходное сообщение -----
От: "Arkady Klimov" <arklimov@keldysh.ru>
Кому: <refal@botik.ru>
Отправлено: 23 апреля 2003 г. 23:28
Тема: Re: Refal-J: first release



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