Александр, как же так, вы же писали что в синтаксисе вещественных констант нет, как же это вы скомпилировали, и выполнили? У меня это тоже не компилируется, точнее неправильно компилируется. Но в самом рефале вещественные числа есть. Вопрос в том, как получить первое число. Если вещественное сложить с целым, будет уже вещественное. Но целое с целым всегда целое. Там есть разные функции типа 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*