Александр, как же так, вы же писали что в синтаксисе вещественных констант
нет, как же это вы скомпилировали, и выполнили?
У меня это тоже не компилируется, точнее неправильно компилируется.
Но в самом рефале вещественные числа есть. Вопрос в том, как получить
первое число. Если вещественное сложить с целым, будет уже вещественное. Но
целое с целым всегда целое. Там есть разные функции типа SIN, LOG - можно
через них получить вещ из цел. МОжно даже считать из файла через READ или
DECODE. Типа все есть, кроме возможности писать в самом языке константы.
Это недоделка.
Кстати, я сам тестирую функции в интерактивном режиме. Он вызывается через
батник rfi.bat.
Или командой ri i+*ask .
Потом вводим (после приглашения #>):
#>mul 3 0.5
1.500000e+000
#> mul 0 -1.0
-0.000000e+000
#> compare 0.0 <MUL 0 -1.0>
'='
#>compare 1 0.0
'<'
 Без угловых скобок строчными (если надо все заглавные) можно (нужно)
писать только самый внешний вызов. Остальные - как в файле *.ref
Как видите, при сравнении целого и вещественного целое всегда меньше. А как
надо?
Аркадий


чт, 28 нояб. 2019 г. в 14:11, Александр Коновалов a.v.konovalov87_AT_mail.ru
<refal@botik.ru>:

> Аркадий!
>
> В дистрибутиве 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>
> *Sent:* Thursday, November 28, 2019 7:35 AM
> *To:* refal@botik.ru
> *S**ubject:* Re: Нужны ли вещественные числа в Рефале?
>
>
>
> Как инструмент изготовления картинок SVG наверно вариант, но там была
> нужна интерактивность, были также средства принимать сигналы от мышки, а
> это можно делать только через экран.
>
> Зачем это "нужно было мне"? Просто чтобы на рефале писать интерактивное
> приложение с богатым графическим UI, включающем создание векторных картинок.
>
>
>
>
>
> чт, 28 ноя 2019 г., 0:45 Boyko Bantchev boykobb_AT_gmail.com <
> refal@botik.ru>:
>
> > Это было давно, во времена MS-DOS’а.
>
> Да, но я о ведь о сейчас говорю – как возможный способ реанимировать
> рисование в Рефале-6 (или ввести в любой Рефал).
>
> > Слишком оптимистичное мнение о SVG. Если график содержит миллиард точек,
> > то SVG (равно как и PostScript) получится необычайно толстым, в браузере
> > будет открываться годами... А вот растровая графика (например, PNG) --
> > ей все равно, миллиард точек на графике или сто миллиардов (я имею в
> > виду размер файла и время загрузки его; создание PNG со ста миллиардами
> > точек, конечно же, в сто раз дольше, чем с миллиардом точек).
>
> Вы говорите о растровой графике, а я – о рисовании линий и фигур, о
> котором написал Аркадий Климов.  Рисование линий и фигур я связываю с
> векторной графикой и никак не с «миллиардом точек».  Впрочем, глубокие
> проблемы с обработкой миллиарда точек, как мне кажется, возникли бы
> и без всякой графики, будь то и растровой.
>
>

-- 
_______________
*С уважением, *
*Аркадий Климов,*
*с.н.с. ИППМ РАН,*
*+7(499)135-32-95*
*+7(916)072-81-48*
    • ... Александр Коновалов 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
              • ... Sergei M. Abramov

Ответить