На 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;
?
А так можно:
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;
А у словарей такое свойство имеется.
Что-то тут не так…