Да, аргумент 10000. С уважением, Юрий Климов
On Tue, 26 Feb 2019 at 14:17, Arkady Klimov arkady.klimov_AT_gmail.com < refal@botik.ru> wrote: > Юра! > Ты нигде не написал, какой у тебя был аргумент. 10000? > А ошибку я тоже у себя нашел, спасибо. > Арк > > PS. У себя на Рефал6 нашел странности. > Для начала проверил, что отождествление vA vA e транслируется также как и > ta eA ta eA e. > Это нормально. Но поиск старого терма делается без оптимизаций, на общих > основниях. > Поэтому поменял образец на sa eA sa eA e, надеясь, что будет > оптимизированное удлинение. > Не тут то было. Посмотрел компилятор - оптимизация не работает, хотя > присутствует, но то ли с ошибкой, то ли с сознательной блокировкой > (какой-то ид OVSYM вместо OSYM стоит). > Разблокировал. Странлировал. > Время работы для 10000 упало вдвое (0.54 сек). Отлично. Но дальше полезла > чертовщина. > С увеличением N время стало расти не квадратично, как раньше, а круче! > И для 100000 стало медленнее чем раньше (114 сек вместо 100). Это я уже не > понимаю. > Нет ли тут каких эффектов, что если мы по длинному списку бежим быстрее > (меньше действий), то все начинает работать медленнее? Может из-за каких-то > свойств кэша? > Аркадий > > вт, 26 февр. 2019 г. в 13:41, Yuri Klimov yuri_AT_klimov.net < > refal@botik.ru>: > >> Добрый день! >> >> Пример Аркадия на Рефал+: >> >> $func? EX sN eS = eS; >> EX \{ >> 0 eS = eS; >> sN eS , 'abc' : e sX e , sX eS :: eR, # \{ eR : vA vA e; }, <EX <Sub sN >> 1> eR>; >> }; >> >> Я ошибся. По умолчанию в компиляторе были выключены оптимизации и включен >> режим отладки. Теперь время около 0.62 секунд. >> >> Пример с двумя iter из документации в приложении. Требует heap'а чуть >> поменьше (1ГБ против 2ГБ). Считает 10.5 секунд. >> >> Второй пример Аркадия на Рефал+ считает без heap'а за около 0.76 секунд: >> >> $func EX1 sN eS = eS; >> EX1 sN eS, sN eS : { >> sN vA vA e = <Next sN eS>; >> 0 e = eS; >> sN e = <EX1 <Sub sN 1> 'a' eS>; >> }; >> >> $func Next sN eS = eS; >> Next { >> sN = (); >> sN sX eS = { >> 'abc' : e sX sY e = <EX1 sN sY eS>; >> = <Next <Add sN 1> eS>; >> }; >> }; >> >> >> С уважением, >> Юрий Климов >> >> P.S. Во втором примере ошибка: >> >>> EX1 sN eS : { >>> // Goal! >>> 0 e = eS; >>> // eS is unacceptable >>> sN vA vA e = <Next sN eS>; // tail recursion, eS is not empty >>> (otherwise previous sentence works) >>> ... >> >> Надо эти два случая переставить местами, а то иначе последних (самый >> левый в строке) символ не проверяется на повторы. >> >> On Tue, 26 Feb 2019 at 09:29, Sergei M. Abramov abram_AT_botik.ru < >> refal@botik.ru> wrote: >> >>> День добрый, >>> >>> > Запустил исходный пример Аркадия на Рефале+ (с компиляцией C++). >>> > Heap пришлось увеличить до 2GB. Время - 2.05 секунды. >>> >>> Юра, сделайте с двумя $iter-ами, пожалуйста. Хочется и на текст >>> полюбоваться, и на прогон. >>> >>> Под руками системы нет, а в сухую (без воды в бассейне) и облажаться >>> могу... >>> >>> Всего доброго, >>> >>> Сергей Абрамов >>> >>> > >