Ошибки PascalABC.NET

На githube системный модуль неактуальный

Залил

Спасибо. Да, меня эта проблема с <= что-то тоже смущала.

При том, что с точки зрения формальной математики более безопасно для подобных трюков использовать именно её а не <, так как одновременное выполнение x<=y и y<=x можно интерпретировать как x=y (даже если это не “строгое” равенство, а, например, равенство ключей в базе данных), а вот одновременное невыполнение x<y и y<x для каких-нибудь частично упорядоченных данных может включать не только равенство, но и случай несравнимых значений.

А что можно? Если бы примерчик…

Ваш пример теперь работает

Мой - да, а кто такой этот less ?

less - функция “меньше” от двух аргументов возвращающая логическое значение: x[0] < y[0]

Возможно это хорошая функция, но компилятор её принимать не захотел, пишет, что less ему незнакомо.

Вы о чём? Где в примере было “less”? less - имя параметра в процедуре sort стандартной библиотеки. В примере вместо него стоит конкретная функция используемая для сравнения “x[0]<y[0]”.

Вот тут. Стало быть, понял неверно. Т.е. там все же некое логическое выражение.

Там теперь и то и другое, смотрите в дистрибутиве LibSource\PABCSystem.pas

/// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения cmp
procedure Sort<T>(a: array of T; cmp: (T,T)->integer);
/// Сортирует динамический массив по критерию сортировки, задаваемому функцией сравнения less
procedure Sort<T>(a: array of T; less: (T,T)->boolean);

На GitHub уже третья версия с номером 1363. Почти запутался.

Почему так можно добавить элемент к последовательности:

var sq := (0 + Range(1, 10)).Println;

А так нельзя:

var sq := (Range(1, 10) + 0).Println;

?

1 лайк

А так можно:

var sq := (Range(1, 10)+Sec(0)).Println;

Так мы находим “сумму” двух последовательностей, а не “сумму” последовательности и одного элемента. Это уже некий костыль получается…

Да понятно, что тут нарушена работа операции сложения…

Тогда несимметрично получается! В начало последовательности элемент добавить можно, а в конец нельзя. Нет логики…

Методы ToDictionary и ToLookup возвращают коллекции указанных типов, но компилятор их не узнаёт.

На GitHub уже изменили (два раза) и теперь работают оба варианта, но с номером ревизии опять какая-то путаница - она всё ещё 1367, так что не совсем понятно обновлён ли дистрибутив, а функция PascalABCVersion всё ещё выдаёт 1364. Извиняюсь за педантизм.

У меня показывает версию 1367, и она якобы последняя.

// создаём последовательность синусов:
var sq := Range(0, 90)
         .Select(i -> Sin(i * PI / 180.0))
         .Println;
Println; 

// создаём словарь:
var dic := sq
          .ToDictionary(i -> 
           Round(ArcSin(i) * 180.0 / PI))
.Println;

Println;    
// печатаем таблицу:
for var i := 0 to 90 do
begin
    Console.Write(' Угол = ' + i.ToString().PadLeft(2));
    //Console.WriteLine(' Синус = ' + dic.ElementAt(i).Value);
    Console.WriteLine(' Синус = ' + dic[i].Value);
end;

А у словарей такое свойство имеется.

Что-то тут не так…