Аркадий! В дистрибутиве 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 со ста миллиардами > точек, конечно же, в сто раз дольше, чем с миллиардом точек). Вы говорите о растровой графике, а я – о рисовании линий и фигур, о котором написал Аркадий Климов. Рисование линий и фигур я связываю с векторной графикой и никак не с «миллиардом точек». Впрочем, глубокие проблемы с обработкой миллиарда точек, как мне кажется, возникли бы и без всякой графики, будь то и растровой.
zero.ref
Description: Binary data