Аркадий!

В дистрибутиве Refal-Java лежит обычный Рефал-6 более свежей версии с 
вещественными числами. И у меня для Вас фокус.

Рассмотрим такую волшебную функцию:

Magic {
  s.X s.Y
    , <COMPARE s.X s.Y> : '='
    , {
        s.X : s.Y = <PRINTLN 'Ok1'>;
        s.X :# s.Y = <PRINTLN 'Magic!'>;
      };

  s.X s.Y = <PRINTLN 'Ok2'>;
};

Функция сравнивает два символа при помощи COMPARE. Если они с точки зрения 
COMPARE не равны, печатается Ok2.

А вот если COMPARE вернула '=', то символы сравниваются при помощи рефальского 
отождествления. Логично было бы ожидать, что функция COMPARE возвращает '=' 
только для синтаксически отождествимых между собой символов (хотя документация 
об этом благоразумно ничего не говорит).

Но можно построить символы, которые не равны с точки зрения отождествления, но 
при этом считаются равными COMPARE:

$ENTRY GO {
  = <Magic <MUL 0.0 +1.0> <MUL 0.0 -1.0>>
};

Умножение нуля на положительное число даёт вещественное значение +0, умножение 
на отрицательное — −0 (минус ноль). Битовые представления у этих чисел 
различны, но вещественное сравнение их считает равными (согласно стандарту IEEE 
на вещественные числа).

Функция COMPARE считает +0 и −0 равными значениями, но рефальское 
отождествление их различает. Выводятся на экран они, кстати, одинаково.

Можно предположить, что рефальское отождествление с повторной переменной 
сравнивает битовое представление чисел, из-за чего ноль не всегда равен нулю. 
Но простая замена битового сравнения на вещественное приведёт к другому фокусу, 
нарушающему более глубокие семантические инварианты.

 

С уважением,
Александр Коновалов

 

From: Александр Коновалов a.v.konovalov87_AT_mail.ru <refal@botik.ru> 
Sent: Thursday, November 28, 2019 1:25 PM
To: refal@botik.ru
Subject: RE: Нужны ли вещественные числа в Рефале?

 

Добрый день, Аркадий!

Хотел посмотреть, как работают вещественные числа в Рефале-6. Скачал 
дистрибутив с сайта refal.ru, распаковал, поправил путь в ri.bat. Написал такую 
программу (zero.ref):

$ENTRY GO {
  = <PRINTLN <DIV +1.0 +1.0>>;
};

Компилирую и запускаю — падает:

D:\…\Refal6>rfc zero.ref

D:\…\Refal6>ri i+c+*go zero.ref         -W0 -B25000
Refal-6 Compiler. Copyright (C) 1993 by Ark. Klimov
zero.ref:
Parsing time = 0.00 seconds
No syntax errors
Compilation time = 0.00 seconds

D:\…\Refal6>ri i+zero.rex+*go
EVAL: *** Unexpected FAIL
EVAL: Act Vf Fre Run [n]Step [n]Trc Evl Chg Kil New Inf M W D H cLr Quit>a
AT: <*DIV 1 "." 0 1 "." 0>
EVAL: Act Vf Fre Run [n]Step [n]Trc Evl Chg Kil New Inf M W D H cLr Quit>q
Exit? (Y/N/P)>y

Такое чувство, что синтаксис вещественных чисел не поддерживается. Число +1.0 
компилятор проинтерпретировал как целое +1, слово "." и целое 0.

 

В документации написано (http://refal.ru/~arklimov/refal6/M5-Lib.htm#Arithm):

«Функции этой группы оперируют с целыми или вещественными числами. Если оба 
аргумента целые, то результат — целый, в противном случае — вещественный.»

Видоизменил программу: делю 1 на 2:

$ENTRY GO {
  = <PRINTLN <DIV 1 2>>;
};

Выводит целый 0.

Похоже, что в версии, опубликованной на сайте refal.ru, вещественные числа не 
поддерживаются. А RI32.EXE я запустить не смог — у меня 64-разрядная Windows и 
она не поддерживает DOS-овские исполнимые файлы.

Возможно, они есть в Refal-Java, но мне пока лень разбираться с её установкой и 
конфигурированием.

 

С уважением,
Александр Коновалов

 

From: Arkady Klimov arkady.klimov_AT_gmail.com <refal@botik.ru 
<mailto:refal@botik.ru> > 
Sent: Thursday, November 28, 2019 7:35 AM
To: refal@botik.ru <mailto:refal@botik.ru> 
Subject: Re: Нужны ли вещественные числа в Рефале?

 

Как инструмент изготовления картинок SVG наверно вариант, но там была нужна 
интерактивность, были также средства принимать сигналы от мышки, а это можно 
делать только через экран.

Зачем это "нужно было мне"? Просто чтобы на рефале писать интерактивное 
приложение с богатым графическим UI, включающем создание векторных картинок.

 

 

чт, 28 ноя 2019 г., 0:45 Boyko Bantchev boykobb_AT_gmail.com <refal@botik.ru 
<mailto:refal@botik.ru> >:

> Это было давно, во времена MS-DOS’а.

Да, но я о ведь о сейчас говорю – как возможный способ реанимировать
рисование в Рефале-6 (или ввести в любой Рефал).

> Слишком оптимистичное мнение о SVG. Если график содержит миллиард точек,
> то SVG (равно как и PostScript) получится необычайно толстым, в браузере
> будет открываться годами... А вот растровая графика (например, PNG) --
> ей все равно, миллиард точек на графике или сто миллиардов (я имею в
> виду размер файла и время загрузки его; создание PNG со ста миллиардами
> точек, конечно же, в сто раз дольше, чем с миллиардом точек).

Вы говорите о растровой графике, а я – о рисовании линий и фигур, о
котором написал Аркадий Климов.  Рисование линий и фигур я связываю с
векторной графикой и никак не с «миллиардом точек».  Впрочем, глубокие
проблемы с обработкой миллиарда точек, как мне кажется, возникли бы
и без всякой графики, будь то и растровой.

Attachment: zero.ref
Description: Binary data

  • Re:... Boyko Bantchev boykobb_AT_gmail . com
    • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
      • ... Arkady Klimov arkady . klimov_AT_gmail . com
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
        • ... Boyko Bantchev boykobb_AT_gmail . com
          • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Mikhail Kovtun mikhail . kovtun_AT_duke . edu
            • ... Boyko Bantchev boykobb_AT_gmail . com
              • ... Arkady Klimov arkady . klimov_AT_gmail . com
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Arkady Klimov arkady . klimov_AT_gmail . com
              • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
  • Re:... Eisymont Leonid verger-lk_AT_yandex . ru
    • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
      • ... Eisymont Leonid verger-lk_AT_yandex . ru
        • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
          • ... Eisymont Leonid verger-lk_AT_yandex . ru
            • ... Александр Коновалов a . v . konovalov87_AT_mail . ru
              • ... Александр Гусев gusev_aleksandr_AT_mail . ru
              • ... Boyko Bantchev boykobb_AT_gmail . com

Ответить