Наверно так быть не должно?
begin
var p:=Range('1','9').Select(c->Ord(c)).Sum;
Print(p)
end.
Подозреваю, что если Ord() возвращает тип word, то Sum для такого типа не перегружена. Сборка 1407.
Наверно так быть не должно?
begin
var p:=Range('1','9').Select(c->Ord(c)).Sum;
Print(p)
end.
Подозреваю, что если Ord() возвращает тип word, то Sum для такого типа не перегружена. Сборка 1407.
Ну, Вы сами и ответили.
Так работает:
begin
var p:=Range('1','9').Select(c->integer(Ord(c))).Sum;
Print(p)
end.
Обращаю Ваше внимание, что Sum не наша, а микрософтовская. Она переопределена для Int32 Int64 Single Double Decimal. Для экзотики надо явно приводить типы
Я так и написал, с явным приведением. Кстати, и Average надо явно приводить. Либо возвращать по Ord не экзотику… А сейчас как-то небогемно получается и Майкрософт слабо утешает. Т.е. надо помнить, что Ord - экзотика, что для экзотики что-то работает, а что-то - нет… Представим, что школьник пишет это не в компьютерном классе… программа не скомпилируется практически со 100% гарантией из-за подобных “исключений”.
Здравствуйте, у меня появилась проблема , я не могу зайти в Паскаль, пишет -Вы не имеете разрешения на просмотр этого каталога пли страницы.
Антивирус отключите и проверьте
А что генерируется в папке с Program1.pas? Program1.exe? Мне кажется, надо просто запретить досовские имена в системе. Непонятно, почему в 10-ке их до сих пор не выкинули
пробовал запретить, но ничего не получилось. а в папке генерируется файл с таким текстом: [Common] Version=1.2
[Window] Maximized=0 Width=1206 Height=576 Left=80 Top=64
[View] ShowOutWindow=0 OutWindowHeight=100
[Print] Left=10 Top=15 Right=10 Bottom=15 Header=10 Footer=10 LineNumbers=0 Wrap=1 Highlight=1 Colors=0 HeaderLine=1 HeaderBox=0 HeaderShaded=0 FooterLine=0 FooterBox=0 FooterShaded=0
[Editor] FontSize=10
[Files] File1=G:\Новая папка\программы\матрица.pas
[Assembler] Background=536870911 Foreground=536870911 Style=0 [Character] Background=536870911 Foreground=536870911 Style=0 [Comment] Background=536870911 Foreground=32768 Style=2 [Float] Background=536870911 Foreground=536870911 Style=0 [Hexadecimal] Background=536870911 Foreground=536870911 Style=0 [Identifier] Background=536870911 Foreground=536870911 Style=0 [Number] Background=536870911 Foreground=536870911 Style=0 [Preprocessor] Background=536870911 Foreground=536870911 Style=2 [Reserved Word] Background=536870911 Foreground=-16777190 Style=1 [Space] Background=536870911 Foreground=536870911 Style=0 [String] Background=536870911 Foreground=-16777190 Style=0 [Symbol] Background=536870911 Foreground=536870911 Style=0
О_О это норма? если описывать просто точку то работает норм, а если как статичную переменную записи - сходит с ума
версия 3.2 сборка 1398(07.03.2017)Неприятно удивил yield вкупе с кортежным присваиванием. По отдельности они работают, а вот вместе…
Вот так все работает (особого смысла в программе прошу не искать - это демонстрационное)
type
TF=(integer,integer);
function f(a:TF):sequence of integer;
begin
var p,q:integer;
p:=a[0]; q:=a[1];
yield p;
yield q;
end;
begin
f((-3,5)).Println
end.
А вот так не компилируется, причем с “убойной” диагностикой ошибки: "неизвестное имя ‘a’ в строке с кортежным присваиванием…
type
TF=(integer,integer);
function f(a:TF):sequence of integer;
begin
var p,q:integer;
(p,q):=a;
yield p;
yield q;
end;
begin
f((-3,5)).Println
end.
Два дня молчания… И вспомнилось мне опять из “Золотого телёнка”…
Остап молча взял европейского гостя за руку, подвел его к висевшему на стене ящику для жалоб и сказал, как глухому: — Сюда! Понимаете? В ящик. Шрайбен, шриб, гешрибен. Писать. Понимаете? Я пишу, ты пишешь, он пишет, она, оно пишет. Понимаете? Мы, вы, они, оне пишут жалобы и кладут в сей ящик. Класть. Глагол класть. Мы, вы, они, оне кладут жалобы… И никто их не вынимает. Вынимать! Я не вынимаю, ты не вынимаешь…
Хочется быть правильно понятым. Я вовсе не топочу копытцами, чтобы “немедля поправили”. Жили с этим - и дальше проживем)). Но хочется понять, что это кто-то просмотрел из тех, “от кого зависит”. И оставил пометку “исправим” или “сам дурак!”. Была бы какая-то определенность. А то, может, так недопустимо писать в программе, а я жду чего-то…
Лучше Вы пишите сразу в Issues. Так правильнее всего. Там гарантированно видят все разработчики и - без соплей.
И - Вы должны понимать, что любая - ЛЮБАЯ - ошибка в компиляторе нами немедленно фиксируется и рано или поздно исправляется.
Но - как приятно читать такие цитаты!
Я напишу, куда скажете и как скажете. Но,… к стыду своему, я не знаю, как туда писать. Готов получить напутствие в личке или тут.
У меня есть несколько “настольных книг”, которые я знаю почти наизусть. Так что, вполне вероятно, это не последняя…)))
Пока про Issues не подсказали, напишу тут.
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
begin
(SeqGen(5,i->i)+SeqGen(5,i->i+5)).Println;
(ArrGen(5,i->i)+ArrGen(5,i->i+5)).Println;
((SeqGen(5,i->i).Reverse)+(SeqGen(5,i->i+5).Reverse)).Println;
//((ArrGen(5,i->i).Reverse)+(ArrGen(5,i->i+5).Reverse)).Println;
end.
Если строку перед end раскомментарить, возникает ошибка компиляции. На мой взгляд, не должна. Есть много аналогичных вариантов возникновения таких ошибок, например, со срезами и т.д., но я думаю, тут причина одна и та же.
P.S. Ошибка не возникает, если после Reverse добавить .Select(i->i)
По крайней мере, в сборке 1427 от 24.04.2017 ошибка уже устранена
В справочный раздел “Методы расширения динамических массивов” влезла вот такая ерунда:
Методы расширения типа array of T
/// Возвращает минимальный элемент
oDo Сделать AdjacentGroup с функцией сравнения
/// Возвращает максинимальный элемент
ction Min<T>(Self: array of T): T; extensionmethod; where T: System.IComparable<T>;
/// Возвращает минимальный элемент
ction Max<T>(Self: array of T): T; extensionmethod; where T: System.IComparable<T>;
/// Возвращает минимальный элемент
ction Min(Self: array of integer): integer; extensionmethod;
/// Возвращает максимальный элемент
ction Min(Self: array of real): real; extensionmethod;
/// Возвращает максимальный элемент
ction Max(Self: array of integer): integer; extensionmethod;
Еще одна ошибка. Вот так не работает:
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
type
Point=(real,real);
begin
var a:Point:=(1.0,2.0)
end.
Выдается ошибка “Program1.pas(5) : Нельзя преобразовать тип ArrayConst к Point<real,real>”
А вот так все нормально:
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017
type
Point=(real,real);
begin
var a:Point;
a:=(1.0,2.0)
end.
Происходит, как будто в первом случае сначала работает конструктор массива, делается попытка автовывода типа, а потом обнаруживается несовместимый с этим автовыводом тип Point.
По крайней мере, в сборке 1427 от 24.04.2017 ошибка уже устранена
Да, поместили в Issues
Сегодня столкнулся с такой проблемой:
Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :‘System.Exception: System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: key
в System.Collections.Generic.Dictionary2.FindEntry(TKey key) в System.Collections.Generic.Dictionary
2.ContainsKey(TKey key)
в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
в PascalABCCompiler.Compiler.Compile()’
Всё было нормально, программу не изменял, Pascal не обновлял. Как будто компилятор сам сломался.
Вы программу приведите, чтобы можно было загрузить её на компьютер и попытаться ситуацию воспроизвести. А то похоже на письмо в конференцию “Помогите, у меня сегодня голова заболела, похоже сама по себе”"